@getmicdrop/svelte-components 5.3.6 → 5.3.10

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 (121) hide show
  1. package/dist/calendar/AboutShow/AboutShow.svelte +9 -8
  2. package/dist/calendar/AboutShow/AboutShow.svelte.d.ts.map +1 -1
  3. package/dist/calendar/Calendar/MiniMonthCalendar.svelte +9 -8
  4. package/dist/calendar/Calendar/MiniMonthCalendar.svelte.d.ts.map +1 -1
  5. package/dist/calendar/FAQs/FAQs.svelte +6 -5
  6. package/dist/calendar/FAQs/FAQs.svelte.d.ts.map +1 -1
  7. package/dist/calendar/MonthSwitcher/MonthSwitcher.svelte +3 -2
  8. package/dist/calendar/MonthSwitcher/MonthSwitcher.svelte.d.ts.map +1 -1
  9. package/dist/calendar/OrderSummary/OrderSummary.svelte +19 -18
  10. package/dist/calendar/OrderSummary/OrderSummary.svelte.d.ts.map +1 -1
  11. package/dist/calendar/PublicCard/PublicCard.svelte +7 -9
  12. package/dist/calendar/PublicCard/PublicCard.svelte.d.ts.map +1 -1
  13. package/dist/calendar/ShowCard/ShowCard.svelte +11 -10
  14. package/dist/calendar/ShowCard/ShowCard.svelte.d.ts.map +1 -1
  15. package/dist/calendar/ShowTimeCard/ShowTimeCard.svelte +5 -3
  16. package/dist/calendar/ShowTimeCard/ShowTimeCard.svelte.d.ts.map +1 -1
  17. package/dist/components/Layout/Section.svelte +4 -4
  18. package/dist/components/Layout/Section.svelte.d.ts.map +1 -1
  19. package/dist/index.d.ts +3 -0
  20. package/dist/index.js +9 -0
  21. package/dist/patterns/data/DataTable.svelte +4 -2
  22. package/dist/patterns/data/DataTable.svelte.d.ts.map +1 -1
  23. package/dist/patterns/forms/FormSection.svelte +4 -2
  24. package/dist/patterns/forms/FormSection.svelte.d.ts.map +1 -1
  25. package/dist/patterns/navigation/BottomNav.svelte +4 -3
  26. package/dist/patterns/navigation/BottomNav.svelte.d.ts.map +1 -1
  27. package/dist/patterns/navigation/Header.svelte +11 -10
  28. package/dist/patterns/navigation/Header.svelte.d.ts.map +1 -1
  29. package/dist/patterns/page/PageHeader.svelte +3 -2
  30. package/dist/patterns/page/PageHeader.svelte.d.ts.map +1 -1
  31. package/dist/patterns/page/PageLayout.svelte +2 -1
  32. package/dist/patterns/page/PageLayout.svelte.d.ts.map +1 -1
  33. package/dist/patterns/page/PageLoader.svelte +2 -1
  34. package/dist/patterns/page/PageLoader.svelte.d.ts.map +1 -1
  35. package/dist/patterns/page/SectionHeader.svelte +5 -3
  36. package/dist/patterns/page/SectionHeader.svelte.d.ts.map +1 -1
  37. package/dist/primitives/Accordion/Accordion.svelte +2 -1
  38. package/dist/primitives/Accordion/Accordion.svelte.d.ts.map +1 -1
  39. package/dist/primitives/Accordion/AccordionItem.svelte +5 -4
  40. package/dist/primitives/Accordion/AccordionItem.svelte.d.ts.map +1 -1
  41. package/dist/primitives/BottomSheet/BottomSheet.svelte +2 -1
  42. package/dist/primitives/BottomSheet/BottomSheet.svelte.d.ts.map +1 -1
  43. package/dist/primitives/Breadcrumb/Breadcrumb.svelte +6 -5
  44. package/dist/primitives/Breadcrumb/Breadcrumb.svelte.d.ts.map +1 -1
  45. package/dist/primitives/Button/Button.svelte +16 -8
  46. package/dist/primitives/Button/Button.svelte.d.ts.map +1 -1
  47. package/dist/primitives/Button/ButtonSaveDemo.svelte +2 -1
  48. package/dist/primitives/Button/ButtonSaveDemo.svelte.d.ts.map +1 -1
  49. package/dist/primitives/Card.svelte +1 -1
  50. package/dist/primitives/DarkModeToggle.svelte +43 -44
  51. package/dist/primitives/DarkModeToggle.svelte.d.ts.map +1 -1
  52. package/dist/primitives/Drawer/Drawer.svelte +121 -47
  53. package/dist/primitives/Drawer/Drawer.svelte.d.ts +4 -0
  54. package/dist/primitives/Drawer/Drawer.svelte.d.ts.map +1 -1
  55. package/dist/primitives/Input/Input.svelte +41 -80
  56. package/dist/primitives/Input/Input.svelte.d.ts +4 -6
  57. package/dist/primitives/Input/Input.svelte.d.ts.map +1 -1
  58. package/dist/primitives/Input/Select.svelte +66 -13
  59. package/dist/primitives/Input/Select.svelte.d.ts +2 -0
  60. package/dist/primitives/Input/Select.svelte.d.ts.map +1 -1
  61. package/dist/primitives/Input/Textarea.svelte +5 -3
  62. package/dist/primitives/Input/Textarea.svelte.d.ts.map +1 -1
  63. package/dist/primitives/Modal/Modal.svelte +13 -1
  64. package/dist/primitives/Modal/Modal.svelte.d.ts.map +1 -1
  65. package/dist/primitives/Pagination/Pagination.svelte +3 -2
  66. package/dist/primitives/Pagination/Pagination.svelte.d.ts.map +1 -1
  67. package/dist/primitives/Tabs/Tabs.svelte +4 -3
  68. package/dist/primitives/Tabs/Tabs.svelte.d.ts.map +1 -1
  69. package/dist/recipes/CropImage/CropImage.svelte +10 -5
  70. package/dist/recipes/CropImage/CropImage.svelte.d.ts.map +1 -1
  71. package/dist/recipes/ImageUploader/ImageUploader.stories.svelte +125 -0
  72. package/dist/recipes/ImageUploader/ImageUploader.stories.svelte.d.ts +28 -0
  73. package/dist/recipes/ImageUploader/ImageUploader.stories.svelte.d.ts.map +1 -0
  74. package/dist/recipes/ImageUploader/ImageUploader.svelte +939 -0
  75. package/dist/recipes/ImageUploader/ImageUploader.svelte.d.ts +60 -0
  76. package/dist/recipes/ImageUploader/ImageUploader.svelte.d.ts.map +1 -0
  77. package/dist/recipes/SuperLogin/SuperLogin.svelte +37 -40
  78. package/dist/recipes/SuperLogin/SuperLogin.svelte.d.ts.map +1 -1
  79. package/dist/recipes/feedback/EmptyState/EmptyState.svelte +3 -2
  80. package/dist/recipes/feedback/EmptyState/EmptyState.svelte.d.ts.map +1 -1
  81. package/dist/recipes/fields/CheckboxField.svelte +3 -2
  82. package/dist/recipes/fields/CheckboxField.svelte.d.ts.map +1 -1
  83. package/dist/recipes/fields/FormField.svelte +12 -4
  84. package/dist/recipes/fields/FormField.svelte.d.ts +3 -1
  85. package/dist/recipes/fields/FormField.svelte.d.ts.map +1 -1
  86. package/dist/recipes/fields/RadioGroup.svelte +13 -4
  87. package/dist/recipes/fields/RadioGroup.svelte.d.ts +4 -1
  88. package/dist/recipes/fields/RadioGroup.svelte.d.ts.map +1 -1
  89. package/dist/recipes/fields/SelectField.svelte +12 -3
  90. package/dist/recipes/fields/SelectField.svelte.d.ts +4 -1
  91. package/dist/recipes/fields/SelectField.svelte.d.ts.map +1 -1
  92. package/dist/recipes/fields/TextareaField.svelte +2 -1
  93. package/dist/recipes/fields/TextareaField.svelte.d.ts.map +1 -1
  94. package/dist/recipes/fields/ToggleField.svelte +3 -2
  95. package/dist/recipes/fields/ToggleField.svelte.d.ts.map +1 -1
  96. package/dist/recipes/inputs/MultiSelect.svelte +8 -7
  97. package/dist/recipes/inputs/MultiSelect.svelte.d.ts.map +1 -1
  98. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte +9 -9
  99. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte.d.ts.map +1 -1
  100. package/dist/recipes/inputs/Search.svelte +7 -6
  101. package/dist/recipes/inputs/Search.svelte.d.ts.map +1 -1
  102. package/dist/recipes/modals/AlertModal.svelte +3 -2
  103. package/dist/recipes/modals/AlertModal.svelte.d.ts.map +1 -1
  104. package/dist/recipes/modals/ConfirmationModal.svelte +4 -3
  105. package/dist/recipes/modals/ConfirmationModal.svelte.d.ts.map +1 -1
  106. package/dist/recipes/modals/InputModal.svelte +9 -8
  107. package/dist/recipes/modals/InputModal.svelte.d.ts.map +1 -1
  108. package/dist/recipes/modals/ModalStateManager.svelte +4 -3
  109. package/dist/recipes/modals/ModalStateManager.svelte.d.ts.map +1 -1
  110. package/dist/recipes/modals/StatusModal.svelte +5 -4
  111. package/dist/recipes/modals/StatusModal.svelte.d.ts.map +1 -1
  112. package/dist/stories/ButtonAuditReview.svelte +361 -397
  113. package/dist/stories/ButtonAuditReview.svelte.d.ts +24 -4
  114. package/dist/stories/ButtonAuditReview.svelte.d.ts.map +1 -1
  115. package/dist/tokens/index.d.ts +4 -8
  116. package/dist/tokens/index.d.ts.map +1 -1
  117. package/dist/tokens/index.js +4 -8
  118. package/dist/tokens/typography.d.ts +76 -169
  119. package/dist/tokens/typography.d.ts.map +1 -1
  120. package/dist/tokens/typography.js +93 -62
  121. package/package.json +4 -2
@@ -1 +1 @@
1
- {"version":3,"file":"FormSection.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/patterns/forms/FormSection.svelte.js"],"names":[],"mappings":";;;;;AAoCA;YAhC6B,MAAM;kBAAgB,MAAM;cAAY,OAAO;YAAU,MAAM;cAAY,GAAG;WAgCjD;wBAhCvC;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,GAAG,CAAA;CAAE"}
1
+ {"version":3,"file":"FormSection.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/patterns/forms/FormSection.svelte.js"],"names":[],"mappings":";;;;;AAwCA;YAhC6B,MAAM;kBAAgB,MAAM;cAAY,OAAO;YAAU,MAAM;cAAY,GAAG;WAgCjD;wBAhCvC;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,GAAG,CAAA;CAAE"}
@@ -2,6 +2,7 @@
2
2
  import { page } from '../../__LIB_STORES__.js';
3
3
  import { base } from '../../__LIB_PATHS__.js';
4
4
  import Icon from "../../primitives/Icons/Icon.svelte";
5
+ import { typography } from '../../tokens/typography';
5
6
 
6
7
  let {
7
8
  links = [],
@@ -35,11 +36,11 @@
35
36
  {#each links as { label, href, icon }}
36
37
  <a
37
38
  {href}
38
- class="flex-1 flex items-center justify-center py-3 px-2 no-underline bg-transparent border-none cursor-pointer min-w-0
39
- text-gray-500 dark:text-gray-400 transition-colors duration-150
39
+ class={`flex-1 flex items-center justify-center py-3 px-2 no-underline bg-transparent border-none cursor-pointer min-w-0
40
+ ${typography.textMuted} transition-colors duration-150
40
41
  hover:text-gray-900 hover:no-underline dark:hover:text-white
41
42
  select-none touch-manipulation
42
- {isActive(href, currentPath) ? 'text-blue-700 dark:text-blue-500' : ''}"
43
+ ${isActive(href, currentPath) ? 'text-blue-700 dark:text-blue-500' : ''}`}
43
44
  aria-label={label}
44
45
  style="-webkit-tap-highlight-color: transparent; -webkit-touch-callout: none;"
45
46
  >
@@ -1 +1 @@
1
- {"version":3,"file":"BottomNav.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/patterns/navigation/BottomNav.svelte.js"],"names":[],"mappings":";;;;;AA0DA;YA9C6B,GAAG,EAAE;WA8CsB;wBA9CrC;IAAE,KAAK,CAAC,EAAE,GAAG,EAAE,CAAA;CAAE"}
1
+ {"version":3,"file":"BottomNav.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/patterns/navigation/BottomNav.svelte.js"],"names":[],"mappings":";;;;;AA4DA;YA9C6B,GAAG,EAAE;WA8CsB;wBA9CrC;IAAE,KAAK,CAAC,EAAE,GAAG,EAAE,CAAA;CAAE"}
@@ -11,6 +11,7 @@
11
11
  import { fade, fly } from "svelte/transition";
12
12
  import { cubicOut } from "svelte/easing";
13
13
  import { portal } from "../../utils/portal.js";
14
+ import { typography } from '../../tokens/typography';
14
15
 
15
16
  let {
16
17
  signoutHandler = () => {},
@@ -61,9 +62,9 @@
61
62
  {#each navLinks as { label, href }}
62
63
  <a
63
64
  {href}
64
- class="px-4 py-2 text-sm font-medium text-gray-500 dark:text-gray-400 no-underline rounded-lg transition-all duration-150
65
+ class={`px-4 py-2 ${typography.label} ${typography.textMuted} no-underline rounded-lg transition-all duration-150
65
66
  hover:text-gray-900 hover:bg-gray-100 hover:no-underline dark:hover:text-white dark:hover:bg-gray-700
66
- {isActive(href, currentPath) ? 'text-blue-700 bg-gray-100 dark:text-blue-500 dark:bg-gray-700' : ''}"
67
+ ${isActive(href, currentPath) ? 'text-blue-700 bg-gray-100 dark:text-blue-500 dark:bg-gray-700' : ''}`}
67
68
  >
68
69
  {label}
69
70
  </a>
@@ -87,8 +88,8 @@
87
88
  <div class="fixed inset-0 z-30 bg-transparent" onclick={() => showDesktopDropdown = false}></div>
88
89
  <div class="absolute top-[calc(100%+0.5rem)] right-0 w-56 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg shadow-lg z-40 overflow-hidden">
89
90
  <div class="py-3 px-4 border-b border-gray-200 dark:border-gray-700">
90
- <span class="block font-semibold text-gray-900 dark:text-white text-sm">{name || "Performer"}</span>
91
- <span class="block text-xs text-gray-500 dark:text-gray-400 mt-0.5">{email || ""}</span>
91
+ <span class={`block ${typography.label}`}>{name || "Performer"}</span>
92
+ <span class={`block ${typography.xsMuted} mt-0.5`}>{email || ""}</span>
92
93
  </div>
93
94
  {#each dropdownLinks as { label, href }}
94
95
  <Button
@@ -121,9 +122,9 @@
121
122
  {#each navLinks as { label, href }}
122
123
  <a
123
124
  {href}
124
- class="px-4 py-2 text-sm font-medium text-gray-500 dark:text-gray-400 no-underline rounded-lg transition-all duration-150
125
+ class={`px-4 py-2 ${typography.label} ${typography.textMuted} no-underline rounded-lg transition-all duration-150
125
126
  hover:text-gray-900 hover:bg-gray-100 hover:no-underline dark:hover:text-white dark:hover:bg-gray-700
126
- {isActive(href, currentPath) ? 'text-blue-700 bg-gray-100 dark:text-blue-500 dark:bg-gray-700' : ''}"
127
+ ${isActive(href, currentPath) ? 'text-blue-700 bg-gray-100 dark:text-blue-500 dark:bg-gray-700' : ''}`}
127
128
  >
128
129
  {label}
129
130
  </a>
@@ -158,8 +159,8 @@
158
159
  <div class="fixed inset-0 z-30 bg-transparent" onclick={() => showDesktopDropdown = false}></div>
159
160
  <div class="absolute top-[calc(100%+0.5rem)] right-0 w-56 bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg shadow-lg z-40 overflow-hidden">
160
161
  <div class="py-3 px-4 border-b border-gray-200 dark:border-gray-700">
161
- <span class="block font-semibold text-gray-900 dark:text-white text-sm">{name || "Performer"}</span>
162
- <span class="block text-xs text-gray-500 dark:text-gray-400 mt-0.5">{email || ""}</span>
162
+ <span class={`block ${typography.label}`}>{name || "Performer"}</span>
163
+ <span class={`block ${typography.xsMuted} mt-0.5`}>{email || ""}</span>
163
164
  </div>
164
165
  {#each dropdownLinks as { label, href }}
165
166
  <Button
@@ -205,8 +206,8 @@
205
206
  </div>
206
207
 
207
208
  <div class="px-6 py-4 border-b border-gray-200 dark:border-gray-700">
208
- <p class="text-base font-semibold text-gray-900 dark:text-white m-0">{name || "Performer"}</p>
209
- <p class="text-sm text-gray-500 dark:text-gray-400 mt-0.5 m-0">{email || ""}</p>
209
+ <p class={`${typography.h4} m-0`}>{name || "Performer"}</p>
210
+ <p class={`${typography.smMuted} mt-0.5 m-0`}>{email || ""}</p>
210
211
  </div>
211
212
 
212
213
  <div class="py-2">
@@ -1 +1 @@
1
- {"version":3,"file":"Header.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/patterns/navigation/Header.svelte.js"],"names":[],"mappings":";;;;;AA6MA;;WA/KuD,MAAM;aAAW,MAAM;YAAU,MAAM;eAAa,GAAG,EAAE;oBAAkB,GAAG,EAAE;qBAAmB,OAAO;WA+K5G;wBA/KlC;IAAE,cAAc,CAAC,WAAW;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;IAAC,aAAa,CAAC,EAAE,GAAG,EAAE,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE"}
1
+ {"version":3,"file":"Header.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/patterns/navigation/Header.svelte.js"],"names":[],"mappings":";;;;;AA+MA;;WA/KuD,MAAM;aAAW,MAAM;YAAU,MAAM;eAAa,GAAG,EAAE;oBAAkB,GAAG,EAAE;qBAAmB,OAAO;WA+K5G;wBA/KlC;IAAE,cAAc,CAAC,WAAW;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;IAAC,aAAa,CAAC,EAAE,GAAG,EAAE,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE"}
@@ -1,5 +1,6 @@
1
1
  <script>
2
2
  import Breadcrumb from '../../primitives/Breadcrumb/Breadcrumb.svelte';
3
+ import { typography } from '../../tokens/typography';
3
4
 
4
5
  let {
5
6
  title = '',
@@ -19,10 +20,10 @@
19
20
  <div class="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4">
20
21
  <div>
21
22
  {#if title}
22
- <h1 class="text-2xl font-semibold text-gray-900 dark:text-white">{title}</h1>
23
+ <h1 class={typography.h1}>{title}</h1>
23
24
  {/if}
24
25
  {#if subtitle}
25
- <p class="mt-1 text-sm text-gray-500 dark:text-gray-400">{subtitle}</p>
26
+ <p class={`mt-1 ${typography.smMuted}`}>{subtitle}</p>
26
27
  {/if}
27
28
  </div>
28
29
 
@@ -1 +1 @@
1
- {"version":3,"file":"PageHeader.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/patterns/page/PageHeader.svelte.js"],"names":[],"mappings":";;;;;AA2CA;YAnC6B,MAAM;eAAa,MAAM;iBAAe,GAAG,EAAE;eAAa,OAAO;YAAU,MAAM;aAAW,GAAG;WAmCnE;wBAnCtC;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,GAAG,CAAA;CAAE"}
1
+ {"version":3,"file":"PageHeader.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/patterns/page/PageHeader.svelte.js"],"names":[],"mappings":";;;;;AA6CA;YAnC6B,MAAM;eAAa,MAAM;iBAAe,GAAG,EAAE;eAAa,OAAO;YAAU,MAAM;aAAW,GAAG;WAmCnE;wBAnCtC;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,GAAG,CAAA;CAAE"}
@@ -1,6 +1,7 @@
1
1
  <script>
2
2
  import Breadcrumb from '../../primitives/Breadcrumb/Breadcrumb.svelte';
3
3
  import Card from '../../primitives/Card.svelte';
4
+ import { typography } from '../../tokens/typography';
4
5
 
5
6
  let {
6
7
  breadcrumb = [],
@@ -16,7 +17,7 @@
16
17
  </script>
17
18
 
18
19
  {#if showHeader}
19
- <nav class="pt-4 px-4 text-gray-900 dark:text-white text-lg font-semibold">
20
+ <nav class={`pt-4 px-4 ${typography.h3}`}>
20
21
  <div class="flex flex-col sm:flex-row sm:items-start sm:justify-between gap-4">
21
22
  <Breadcrumb data={breadcrumb} {title} {subtitle} />
22
23
  {#if actions}
@@ -1 +1 @@
1
- {"version":3,"file":"PageLayout.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/patterns/page/PageLayout.svelte.js"],"names":[],"mappings":";;;;;AAgDA;iBAtCkC,GAAG,EAAE;YAAU,MAAM;eAAa,MAAM;cAAY,MAAM;eAAa,MAAM;gBAAc,MAAM;iBAAe,OAAO;cAAY,GAAG;aAAW,GAAG;WAsC7H;wBAtCtC;IAAE,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,GAAG,CAAC;IAAC,OAAO,EAAE,GAAG,CAAA;CAAE"}
1
+ {"version":3,"file":"PageLayout.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/patterns/page/PageLayout.svelte.js"],"names":[],"mappings":";;;;;AAkDA;iBAtCkC,GAAG,EAAE;YAAU,MAAM;eAAa,MAAM;cAAY,MAAM;eAAa,MAAM;gBAAc,MAAM;iBAAe,OAAO;cAAY,GAAG;aAAW,GAAG;WAsC7H;wBAtCtC;IAAE,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,GAAG,CAAC;IAAC,OAAO,EAAE,GAAG,CAAA;CAAE"}
@@ -2,6 +2,7 @@
2
2
  import Spinner from "../../primitives/Spinner/Spinner.svelte";
3
3
  import Alert from "../../primitives/Alert/Alert.svelte";
4
4
  import Button from "../../primitives/Button/Button.svelte";
5
+ import { typography } from '../../tokens/typography';
5
6
 
6
7
  let {
7
8
  isLoading = true,
@@ -20,7 +21,7 @@
20
21
  <div class="text-center">
21
22
  <Spinner />
22
23
  {#if loadingMessage}
23
- <p class="mt-4 text-gray-500 dark:text-gray-400">{loadingMessage}</p>
24
+ <p class={`mt-4 ${typography.textMuted}`}>{loadingMessage}</p>
24
25
  {/if}
25
26
  </div>
26
27
  </div>
@@ -1 +1 @@
1
- {"version":3,"file":"PageLoader.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/patterns/page/PageLoader.svelte.js"],"names":[],"mappings":";;;;;AAkDA;gBAtCiC,OAAO;YAAU,GAAG;qBAAmB,MAAM;iBAAe,MAAM;gBAAc,OAAO;;gBAAkC,MAAM;cAAY,GAAG;WAsCtH;wBAtCtC;IAAE,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,GAAG,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,WAAW;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,GAAG,CAAA;CAAE"}
1
+ {"version":3,"file":"PageLoader.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/patterns/page/PageLoader.svelte.js"],"names":[],"mappings":";;;;;AAoDA;gBAtCiC,OAAO;YAAU,GAAG;qBAAmB,MAAM;iBAAe,MAAM;gBAAc,OAAO;;gBAAkC,MAAM;cAAY,GAAG;WAsCtH;wBAtCtC;IAAE,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,GAAG,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,WAAW;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,GAAG,CAAA;CAAE"}
@@ -1,4 +1,6 @@
1
1
  <script>
2
+ import { typography } from '../../tokens/typography';
3
+
2
4
  let {
3
5
  title = '',
4
6
  description = '',
@@ -17,10 +19,10 @@
17
19
  <div class="flex items-center justify-between gap-4">
18
20
  <div class="flex items-center gap-2">
19
21
  {#if title}
20
- <h2 class="text-lg font-medium text-gray-900 dark:text-white">{title}</h2>
22
+ <h2 class={typography.h3}>{title}</h2>
21
23
  {/if}
22
24
  {#if count !== null}
23
- <span class="inline-flex items-center justify-center px-2 py-0.5 text-xs font-medium text-gray-600 dark:text-gray-400 bg-gray-100 dark:bg-gray-700 rounded-full">
25
+ <span class={`inline-flex items-center justify-center px-2 py-0.5 ${typography.xsMuted} bg-gray-100 dark:bg-gray-700 rounded-full`}>
24
26
  {count}
25
27
  </span>
26
28
  {/if}
@@ -34,6 +36,6 @@
34
36
  </div>
35
37
 
36
38
  {#if description}
37
- <p class="mt-1 text-sm text-gray-500 dark:text-gray-400">{description}</p>
39
+ <p class={`mt-1 ${typography.smMuted}`}>{description}</p>
38
40
  {/if}
39
41
  </div>
@@ -1 +1 @@
1
- {"version":3,"file":"SectionHeader.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/patterns/page/SectionHeader.svelte.js"],"names":[],"mappings":";;;;;AA6CA;YAzC6B,MAAM;kBAAgB,MAAM;YAAU,GAAG;cAAY,OAAO;YAAU,MAAM;aAAW,GAAG;WAyC3D;wBAzCzC;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,GAAG,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,GAAG,CAAA;CAAE"}
1
+ {"version":3,"file":"SectionHeader.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/patterns/page/SectionHeader.svelte.js"],"names":[],"mappings":";;;;;AAiDA;YAzC6B,MAAM;kBAAgB,MAAM;YAAU,GAAG;cAAY,OAAO;YAAU,MAAM;aAAW,GAAG;WAyC3D;wBAzCzC;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,GAAG,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,GAAG,CAAA;CAAE"}
@@ -50,9 +50,10 @@
50
50
  });
51
51
 
52
52
  // Flowbite-native classes
53
+ // Note: overflow-hidden was removed to allow dropdowns/menus inside accordion items to render outside the container
53
54
  let containerClasses = $derived(flush
54
55
  ? "divide-y divide-gray-200 dark:divide-gray-700"
55
- : "border border-gray-200 dark:border-gray-700 rounded-lg overflow-hidden divide-y divide-gray-200 dark:divide-gray-700");
56
+ : "border border-gray-200 dark:border-gray-700 rounded-lg divide-y divide-gray-200 dark:divide-gray-700");
56
57
  </script>
57
58
 
58
59
  <div class="{containerClasses} {className}" data-accordion={multiple ? "open" : "collapse"} {...restProps}>
@@ -1 +1 @@
1
- {"version":3,"file":"Accordion.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/primitives/Accordion/Accordion.svelte.ts"],"names":[],"mappings":"AAGA;;;;;;KAMK;AACL,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAKpC,UAAU,KAAK;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAmDH,QAAA,MAAM,SAAS,2CAAwC,CAAC;AACxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9C,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"Accordion.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/primitives/Accordion/Accordion.svelte.ts"],"names":[],"mappings":"AAGA;;;;;;KAMK;AACL,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAKpC,UAAU,KAAK;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAoDH,QAAA,MAAM,SAAS,2CAAwC,CAAC;AACxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9C,eAAe,SAAS,CAAC"}
@@ -12,6 +12,7 @@
12
12
  import { slide } from "svelte/transition";
13
13
  import type { Writable } from "svelte/store";
14
14
  import { ChevronUpOutline } from "../Icons";
15
+ import { typography } from "../../tokens/typography";
15
16
 
16
17
  interface Props {
17
18
  open?: boolean;
@@ -57,7 +58,7 @@
57
58
  // Flowbite-native header classes
58
59
  let headerClasses = $derived([
59
60
  "flex items-center justify-between w-full p-5 font-medium text-left",
60
- "text-gray-500 dark:text-gray-400",
61
+ typography.smMuted,
61
62
  "bg-gray-100 dark:bg-gray-800",
62
63
  "hover:bg-gray-200 dark:hover:bg-gray-700",
63
64
  "focus:ring-4 focus:ring-gray-200 dark:focus:ring-gray-800",
@@ -74,7 +75,7 @@
74
75
  aria-expanded={isOpen}
75
76
  onclick={handleClick}
76
77
  >
77
- <span class="text-gray-900 dark:text-white">
78
+ <span class={typography.body}>
78
79
  {#if header}{@render header()}{:else}Accordion Item{/if}
79
80
  </span>
80
81
  <!-- Flowbite arrow icon -->
@@ -84,8 +85,8 @@
84
85
 
85
86
  {#if isOpen}
86
87
  <div transition:slide={{ duration: 200 }}>
87
- <div class="p-5 {flush ? '' : 'border border-t-0 border-gray-200 dark:border-gray-700'} dark:bg-gray-900">
88
- <p class="text-gray-500 dark:text-gray-400">
88
+ <div class="p-5 {flush ? '' : 'border border-t-0 border-gray-200 dark:border-gray-700'}">
89
+ <p class={typography.bodyMuted}>
89
90
  {#if children}{@render children()}{/if}
90
91
  </p>
91
92
  </div>
@@ -1 +1 @@
1
- {"version":3,"file":"AccordionItem.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/primitives/Accordion/AccordionItem.svelte.ts"],"names":[],"mappings":"AAGA;;;;;;;KAOK;AACL,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAOpC,UAAU,KAAK;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AA6EH,QAAA,MAAM,aAAa,2CAAwC,CAAC;AAC5D,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AACtD,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"AccordionItem.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/primitives/Accordion/AccordionItem.svelte.ts"],"names":[],"mappings":"AAGA;;;;;;;KAOK;AACL,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAQpC,UAAU,KAAK;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AA8EH,QAAA,MAAM,aAAa,2CAAwC,CAAC;AAC5D,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AACtD,eAAe,aAAa,CAAC"}
@@ -3,6 +3,7 @@
3
3
  import { fly, fade } from "svelte/transition";
4
4
  import { cubicOut } from "svelte/easing";
5
5
  import type { Snippet } from 'svelte';
6
+ import { typography } from "../../tokens/typography";
6
7
 
7
8
  interface Props {
8
9
  /** Whether the bottom sheet is visible */
@@ -81,7 +82,7 @@
81
82
 
82
83
  {#if title}
83
84
  <div class="px-6 pb-4 border-b border-gray-200 dark:border-gray-700 shrink-0">
84
- <h3 class="text-lg font-semibold text-gray-900 dark:text-white">{title}</h3>
85
+ <h3 class={typography.h3}>{title}</h3>
85
86
  </div>
86
87
  {/if}
87
88
 
@@ -1 +1 @@
1
- {"version":3,"file":"BottomSheet.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/primitives/BottomSheet/BottomSheet.svelte.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGpC,UAAU,KAAK;IACb,0CAA0C;IAC1C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,mBAAmB;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oCAAoC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAmFH,QAAA,MAAM,WAAW,2CAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"BottomSheet.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/primitives/BottomSheet/BottomSheet.svelte.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAIpC,UAAU,KAAK;IACb,0CAA0C;IAC1C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,mBAAmB;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oCAAoC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAoFH,QAAA,MAAM,WAAW,2CAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
@@ -1,5 +1,6 @@
1
1
  <script lang="ts">
2
2
  import { ChevronRightOutline, HomeSolid } from "../Icons";
3
+ import { typography } from "../../tokens/typography";
3
4
 
4
5
  interface BreadcrumbItem {
5
6
  name: string;
@@ -37,7 +38,7 @@
37
38
 
38
39
  <div class="flex flex-col items-start gap-2 min-w-0">
39
40
  {#if data.length > 0}
40
- <nav class="flex items-center text-sm font-medium text-gray-500 dark:text-gray-400 {className}" aria-label="Breadcrumb">
41
+ <nav class={`flex items-center ${typography.smMuted} font-medium ${className}`} aria-label="Breadcrumb">
41
42
  <ol class="inline-flex items-center space-x-1 md:space-x-2 rtl:space-x-reverse flex-wrap">
42
43
  {#each data as crumb, index}
43
44
  <li class="inline-flex items-center">
@@ -48,20 +49,20 @@
48
49
  <a
49
50
  href={crumb.href}
50
51
  onclick={() => handleClick(crumb)}
51
- class="inline-flex items-center text-sm font-medium text-gray-700 hover:text-blue-600 dark:text-gray-400 dark:hover:text-white"
52
+ class="{typography.smMuted} inline-flex items-center font-medium hover:text-blue-600 dark:hover:text-white"
52
53
  >
53
54
  <HomeSolid class="w-3 h-3 me-2.5" />
54
55
  {crumb.name}
55
56
  </a>
56
57
  {:else if index === data.length - 1}
57
- <span class="ms-1 text-sm font-medium text-gray-500 md:ms-2 dark:text-gray-400 max-w-48 truncate" title={crumb.name}>
58
+ <span class={`ms-1 ${typography.smMuted} font-medium md:ms-2 max-w-48 truncate`} title={crumb.name}>
58
59
  {crumb.name}
59
60
  </span>
60
61
  {:else}
61
62
  <a
62
63
  href={crumb.href}
63
64
  onclick={() => handleClick(crumb)}
64
- class="ms-1 text-sm font-medium text-gray-700 hover:text-blue-600 md:ms-2 dark:text-gray-400 dark:hover:text-white max-w-48 truncate"
65
+ class="{typography.smMuted} ms-1 font-medium hover:text-blue-600 md:ms-2 dark:hover:text-white max-w-48 truncate"
65
66
  title={crumb.name}
66
67
  >
67
68
  {crumb.name}
@@ -81,7 +82,7 @@
81
82
  </h1>
82
83
  {/if}
83
84
  {#if subtitle}
84
- <p class="text-sm text-gray-500 dark:text-gray-400">{subtitle}</p>
85
+ <p class={typography.smMuted}>{subtitle}</p>
85
86
  {/if}
86
87
  </div>
87
88
  {/if}
@@ -1 +1 @@
1
- {"version":3,"file":"Breadcrumb.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/primitives/Breadcrumb/Breadcrumb.svelte.ts"],"names":[],"mappings":"AAME,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,KAAK;IACb,6BAA6B;IAC7B,IAAI,CAAC,EAAE,cAAc,EAAE,CAAC;IACxB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;CAC3C;AAiEH,QAAA,MAAM,UAAU,2CAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"Breadcrumb.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/primitives/Breadcrumb/Breadcrumb.svelte.ts"],"names":[],"mappings":"AAOE,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,KAAK;IACb,6BAA6B;IAC7B,IAAI,CAAC,EAAE,cAAc,EAAE,CAAC;IACxB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;CAC3C;AAkEH,QAAA,MAAM,UAAU,2CAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
@@ -22,6 +22,7 @@
22
22
  * Sizes (Flowbite native): xs, sm, md, lg, xl
23
23
  */
24
24
  import { CheckOutline } from '../Icons';
25
+ import { twMerge } from 'tailwind-merge';
25
26
 
26
27
  /** @type {{
27
28
  variant?: string,
@@ -116,7 +117,7 @@
116
117
  // Variant classes with all states in Tailwind (no focus rings - design decision)
117
118
  const variantClasses = {
118
119
  default: "text-white bg-blue-700 border border-blue-700 hover:bg-blue-800 dark:bg-blue-600 dark:hover:bg-blue-700",
119
- alternative: "text-gray-900 bg-white border border-gray-200 hover:bg-gray-100 hover:text-blue-700 dark:bg-gray-800 dark:text-gray-400 dark:border-gray-600 dark:hover:text-white dark:hover:bg-gray-700",
120
+ alternative: "text-gray-900 bg-white border border-gray-200 hover:bg-gray-100 hover:text-blue-700 dark:bg-gray-800 dark:text-white dark:border-gray-600 dark:hover:text-white dark:hover:bg-gray-700",
120
121
  outline: "text-blue-700 bg-transparent border border-blue-700 hover:text-white hover:bg-blue-800 dark:border-blue-500 dark:text-blue-500 dark:hover:text-white dark:hover:bg-blue-500",
121
122
  red: "text-white bg-red-700 border border-red-700 hover:bg-red-800 dark:bg-red-600 dark:hover:bg-red-700",
122
123
  "red-outline": "text-red-700 bg-transparent border border-red-700 hover:text-white hover:bg-red-800 dark:border-red-500 dark:text-red-500 dark:hover:text-white dark:hover:bg-red-600",
@@ -131,20 +132,25 @@
131
132
  // Menu items - full width, left-aligned, for dropdowns/sheets and sidebar nav
132
133
  "menu-item": "w-full text-left text-gray-900 bg-transparent border-transparent hover:bg-gray-100 dark:text-white dark:hover:bg-gray-600",
133
134
  // Danger menu item - red text version
134
- "menu-item-danger": "w-full text-left text-red-600 bg-transparent border-transparent hover:bg-red-50 dark:text-red-500 dark:hover:bg-gray-700",
135
+ "menu-item-danger": "w-full text-left text-red-600 bg-transparent border-transparent hover:bg-red-50 dark:text-red-500 dark:hover:bg-gray-600",
135
136
  // Selectable card - bordered card-like button for list selections
136
137
  card: "w-full text-left text-gray-900 bg-white border border-gray-300 hover:bg-gray-50 dark:bg-gray-800 dark:text-white dark:border-gray-600 dark:hover:bg-gray-700",
137
138
  // Search result item - blue hover for search dropdowns
138
139
  "search-result": "w-full text-left text-gray-900 bg-transparent border-transparent hover:bg-blue-50 focus:bg-blue-50 dark:text-white dark:hover:bg-blue-900/20 dark:focus:bg-blue-900/20",
139
140
  // Sidebar toggle - compact pill for sidebar expand/collapse
140
141
  "sidebar-toggle": "w-6 h-7 text-gray-900 bg-blue-100 border border-blue-200 hover:bg-blue-200 shadow-lg dark:text-white dark:bg-gray-800 dark:border-gray-700 dark:hover:bg-gray-700",
142
+ // Bottom navigation item - vertical layout, transparent, for mobile nav bars
143
+ nav: "flex-col h-full py-2 text-gray-500 bg-transparent border-transparent hover:text-blue-600 dark:text-gray-400 dark:hover:text-blue-500",
144
+ // Calendar day cell - base styling with hover, colors overridden via className
145
+ "calendar-day": "border-transparent text-gray-900 dark:text-white hover:bg-gray-100 dark:hover:bg-gray-700",
141
146
  };
142
147
 
143
- // Active state classes for ghost, toggle, and menu-item
148
+ // Active state classes for ghost, toggle, menu-item, and nav
144
149
  const activeClasses = {
145
150
  ghost: "text-blue-700 bg-blue-50 dark:text-white dark:bg-gray-900",
146
- toggle: "text-white bg-blue-600 border-blue-600 hover:bg-blue-700 dark:bg-blue-600 dark:hover:bg-blue-700",
151
+ toggle: "text-white bg-blue-600 border-blue-600 hover:bg-blue-700 dark:text-white dark:bg-blue-600 dark:border-blue-600 dark:hover:bg-blue-700",
147
152
  "menu-item": "bg-blue-50 dark:bg-gray-700",
153
+ nav: "text-blue-600 dark:text-blue-500",
148
154
  };
149
155
 
150
156
  // Disabled classes
@@ -159,14 +165,16 @@
159
165
  if (resolvedVariant === "card") return cardSizes[size] || cardSizes.md;
160
166
  if (resolvedVariant === "link") return "text-sm";
161
167
  if (resolvedVariant === "sidebar-toggle") return ""; // Fixed dimensions in variant
168
+ if (resolvedVariant === "nav") return ""; // Nav has sizing in variant class
162
169
  return sizeClasses[size] || sizeClasses.md;
163
170
  })());
164
171
 
165
172
  let variantClass = $derived((() => {
166
173
  if (success) return variantClasses.success;
167
174
  if (disabled && !loading && !success) return disabledClasses;
168
- if (active && (resolvedVariant === "ghost" || resolvedVariant === "toggle" || resolvedVariant === "menu-item")) {
169
- return (activeClasses[resolvedVariant] || "") + " " + (variantClasses[resolvedVariant] || "");
175
+ if (active && activeClasses[resolvedVariant]) {
176
+ // When active, use ONLY active classes (they include all necessary styling)
177
+ return activeClasses[resolvedVariant];
170
178
  }
171
179
  return variantClasses[resolvedVariant] || variantClasses.default;
172
180
  })());
@@ -182,7 +190,7 @@
182
190
  // Use justify-between when there's trailing content (e.g., chevrons in nav items)
183
191
  let hasTrailing = $derived(typeof trailing === 'function' || trailing);
184
192
 
185
- let buttonClasses = $derived([
193
+ let buttonClasses = $derived(twMerge(
186
194
  "relative",
187
195
  isLeftAligned
188
196
  ? (hasTrailing ? "flex items-center justify-between" : "flex items-center justify-start")
@@ -198,7 +206,7 @@
198
206
  variantClass,
199
207
  effectiveDisabled ? "cursor-not-allowed" : "cursor-pointer",
200
208
  className
201
- ].filter(Boolean).join(" "));
209
+ ));
202
210
  </script>
203
211
 
204
212
  {#if href}
@@ -1 +1 @@
1
- {"version":3,"file":"Button.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/primitives/Button/Button.svelte.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAgQA;;cAfc,MAAM;WACT,MAAM;eACF,OAAO;cACR,OAAO;cACP,OAAO;kBACH,MAAM;aACX,OAAO;WACT,MAAM,GAAG,IAAI;WACb,QAAQ,GAAG,QAAQ,GAAG,OAAO;eACzB,GAAG;eACH,GAAG;YACN,MAAM;cACJ,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI;WAGgB"}
1
+ {"version":3,"file":"Button.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/primitives/Button/Button.svelte.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAyQA;;cAfc,MAAM;WACT,MAAM;eACF,OAAO;cACR,OAAO;cACP,OAAO;kBACH,MAAM;aACX,OAAO;WACT,MAAM,GAAG,IAAI;WACb,QAAQ,GAAG,QAAQ,GAAG,OAAO;eACzB,GAAG;eACH,GAAG;YACN,MAAM;cACJ,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI;WAGgB"}
@@ -1,5 +1,6 @@
1
1
  <script lang="ts">
2
2
  import Button from "./Button.svelte";
3
+ import { typography } from "../../tokens/typography";
3
4
 
4
5
  let loading = $state(false);
5
6
  let success = $state(false);
@@ -20,5 +21,5 @@
20
21
 
21
22
  <div class="flex gap-4 items-center">
22
23
  <Button onclick={handleSave} {loading} {success}>Save</Button>
23
- <button class="text-sm text-gray-500 dark:text-gray-400 underline" onclick={resetState}>Reset (simulates user edit)</button>
24
+ <button class={`${typography.smMuted} underline`} onclick={resetState}>Reset (simulates user edit)</button>
24
25
  </div>
@@ -1 +1 @@
1
- {"version":3,"file":"ButtonSaveDemo.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/primitives/Button/ButtonSaveDemo.svelte.ts"],"names":[],"mappings":"AAgCA,QAAA,MAAM,cAAc,2DAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"ButtonSaveDemo.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/primitives/Button/ButtonSaveDemo.svelte.ts"],"names":[],"mappings":"AAkCA,QAAA,MAAM,cAAc,2DAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
@@ -21,7 +21,7 @@
21
21
  </script>
22
22
 
23
23
  <div
24
- class="bg-white dark:bg-gray-800 rounded-lg shadow {border ? 'border border-gray-200 dark:border-gray-700' : ''} {padding ? 'p-6' : ''} {horizontal ? 'flex flex-row' : ''} {className}"
24
+ class="bg-white dark:bg-gray-900 rounded-lg shadow-md {border ? 'border border-gray-200 dark:border-gray-700' : ''} {padding ? 'p-6' : ''} {horizontal ? 'flex flex-row' : ''} {className}"
25
25
  {...restProps}
26
26
  >
27
27
  {#if children}{@render children()}{/if}
@@ -2,6 +2,7 @@
2
2
  import { onMount } from "svelte";
3
3
  import SunIcon from "./Icons/SunIcon.svelte";
4
4
  import MoonIcon from "./Icons/MoonIcon.svelte";
5
+ import Button from "./Button/Button.svelte";
5
6
 
6
7
  interface Props {
7
8
  /** Container selector for applying dark class */
@@ -89,49 +90,47 @@
89
90
  );
90
91
  </script>
91
92
 
92
- <div class="flex w-full items-center justify-center py-4 transition-all">
93
- <button
94
- onclick={toggleTheme}
95
- ontouchend={(e) => (e.currentTarget as HTMLElement).blur()}
96
- class="relative flex h-10 w-10 cursor-pointer select-none items-center justify-center overflow-hidden rounded-lg border border-gray-200 bg-white text-gray-900 transition-all hover:border-blue-500 hover:shadow-md focus:outline-none dark:border-gray-600 dark:bg-gray-800 dark:text-gray-100"
97
- aria-label="Toggle theme"
98
- title={titleText}
93
+ <Button
94
+ variant="alternative"
95
+ onclick={toggleTheme}
96
+ class="relative h-10 w-10 overflow-hidden p-0"
97
+ aria-label="Toggle theme"
98
+ title={titleText}
99
+ >
100
+ <span
101
+ class="text-amber-500 transition-all duration-300 {themeMode === 'light'
102
+ ? 'scale-100 rotate-0 opacity-100'
103
+ : 'pointer-events-none absolute scale-0 rotate-180 opacity-0'}"
99
104
  >
100
- <span
101
- class="text-amber-500 transition-all duration-300 {themeMode === 'light'
102
- ? 'scale-100 rotate-0 opacity-100'
103
- : 'pointer-events-none absolute scale-0 rotate-180 opacity-0'}"
104
- >
105
- <SunIcon size="20" />
106
- </span>
107
-
108
- <span
109
- class="transition-all duration-300 {themeMode === 'dark'
110
- ? 'scale-100 rotate-0 opacity-100'
111
- : 'pointer-events-none absolute scale-0 rotate-180 opacity-0'}"
112
- >
113
- <MoonIcon size="20" color="white" />
114
- </span>
115
-
116
- {#if themeMode === "auto"}
117
- <div class="absolute inset-0 overflow-hidden rounded-lg">
118
- <div
119
- class="absolute flex h-full w-full items-center justify-center bg-white"
120
- style="clip-path: polygon(0 0, 100% 0, 0 100%)"
121
- >
122
- <span class="-translate-x-1 -translate-y-1 text-amber-500">
123
- <SunIcon size="12" />
124
- </span>
125
- </div>
126
- <div
127
- class="absolute flex h-full w-full items-center justify-center bg-gray-800"
128
- style="clip-path: polygon(100% 0, 100% 100%, 0 100%)"
129
- >
130
- <span class="translate-x-1 translate-y-1">
131
- <MoonIcon size="12" color="white" />
132
- </span>
133
- </div>
105
+ <SunIcon size="20" />
106
+ </span>
107
+
108
+ <span
109
+ class="transition-all duration-300 {themeMode === 'dark'
110
+ ? 'scale-100 rotate-0 opacity-100'
111
+ : 'pointer-events-none absolute scale-0 rotate-180 opacity-0'}"
112
+ >
113
+ <MoonIcon size="20" color="white" />
114
+ </span>
115
+
116
+ {#if themeMode === "auto"}
117
+ <div class="absolute inset-0 overflow-hidden rounded-lg">
118
+ <div
119
+ class="absolute flex h-full w-full items-center justify-center bg-white"
120
+ style="clip-path: polygon(0 0, 100% 0, 0 100%)"
121
+ >
122
+ <span class="-translate-x-1 -translate-y-1 text-amber-500">
123
+ <SunIcon size="12" />
124
+ </span>
125
+ </div>
126
+ <div
127
+ class="absolute flex h-full w-full items-center justify-center bg-gray-800"
128
+ style="clip-path: polygon(100% 0, 100% 100%, 0 100%)"
129
+ >
130
+ <span class="translate-x-1 translate-y-1">
131
+ <MoonIcon size="12" color="white" />
132
+ </span>
134
133
  </div>
135
- {/if}
136
- </button>
137
- </div>
134
+ </div>
135
+ {/if}
136
+ </Button>
@@ -1 +1 @@
1
- {"version":3,"file":"DarkModeToggle.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/primitives/DarkModeToggle.svelte.ts"],"names":[],"mappings":"AAQE,UAAU,KAAK;IACb,iDAAiD;IACjD,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAyHH,QAAA,MAAM,cAAc,2CAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"DarkModeToggle.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/primitives/DarkModeToggle.svelte.ts"],"names":[],"mappings":"AASE,UAAU,KAAK;IACb,iDAAiD;IACjD,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAwHH,QAAA,MAAM,cAAc,2CAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}