@getmicdrop/svelte-components 5.5.0 → 5.5.4

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 (214) hide show
  1. package/dist/calendar/AboutShow/AboutShow.svelte +172 -172
  2. package/dist/calendar/Calendar/MiniMonthCalendar.svelte +782 -782
  3. package/dist/calendar/FAQs/FAQs.svelte +75 -75
  4. package/dist/calendar/MonthSwitcher/MonthSwitcher.svelte +126 -126
  5. package/dist/calendar/OrderSummary/OrderSummary.svelte +367 -367
  6. package/dist/calendar/PublicCard/PublicCard.svelte +134 -134
  7. package/dist/calendar/ShowCard/ShowCard.svelte +157 -157
  8. package/dist/calendar/ShowTimeCard/ShowTimeCard.svelte +61 -61
  9. package/dist/components/Layout/Grid.svelte +4 -4
  10. package/dist/components/Layout/Section.svelte +80 -80
  11. package/dist/components/Layout/Sidebar.svelte +108 -108
  12. package/dist/components/Layout/Stack.svelte +6 -6
  13. package/dist/constants/validation.js +91 -91
  14. package/dist/constants/validation.spec.js +64 -64
  15. package/dist/index.d.ts +1 -1
  16. package/dist/index.js +226 -226
  17. package/dist/patterns/data/DataGrid.svelte +45 -45
  18. package/dist/patterns/data/DataList.svelte +24 -24
  19. package/dist/patterns/data/DataTable.svelte +36 -36
  20. package/dist/patterns/forms/FormActions.spec.js +88 -88
  21. package/dist/patterns/forms/FormActions.stories.svelte +97 -97
  22. package/dist/patterns/forms/FormActions.svelte +46 -46
  23. package/dist/patterns/forms/FormGrid.svelte +33 -33
  24. package/dist/patterns/forms/FormSection.svelte +32 -32
  25. package/dist/patterns/forms/FormValidationSummary.stories.svelte +83 -83
  26. package/dist/patterns/forms/FormValidationSummary.svelte +33 -33
  27. package/dist/patterns/layout/Sidebar.svelte +39 -39
  28. package/dist/patterns/navigation/BottomNav.stories.svelte +117 -117
  29. package/dist/patterns/navigation/BottomNav.svelte +20 -20
  30. package/dist/patterns/navigation/Header.stories.svelte +77 -77
  31. package/dist/patterns/navigation/Header.svelte +193 -193
  32. package/dist/patterns/page/PageHeader.svelte +18 -18
  33. package/dist/patterns/page/PageLayout.svelte +40 -40
  34. package/dist/patterns/page/PageLoader.spec.js +54 -54
  35. package/dist/patterns/page/PageLoader.stories.svelte +137 -137
  36. package/dist/patterns/page/PageLoader.svelte +24 -24
  37. package/dist/patterns/page/SectionHeader.svelte +29 -29
  38. package/dist/presets/badges.js +112 -112
  39. package/dist/presets/buttons.js +76 -76
  40. package/dist/presets/index.js +9 -9
  41. package/dist/primitives/Accordion/Accordion.stories.svelte +75 -75
  42. package/dist/primitives/Accordion/Accordion.svelte +42 -42
  43. package/dist/primitives/Accordion/AccordionItem.svelte +95 -95
  44. package/dist/primitives/Alert/Alert.spec.js +170 -170
  45. package/dist/primitives/Alert/Alert.stories.svelte +88 -88
  46. package/dist/primitives/Alert/Alert.svelte +27 -27
  47. package/dist/primitives/Avatar/Avatar.stories.svelte +94 -94
  48. package/dist/primitives/Avatar/Avatar.svelte +66 -66
  49. package/dist/primitives/Badges/Badge.spec.js +103 -103
  50. package/dist/primitives/Badges/Badge.stories.svelte +86 -86
  51. package/dist/primitives/Badges/Badge.svelte +79 -79
  52. package/dist/primitives/BottomSheet/BottomSheet.spec.js +127 -127
  53. package/dist/primitives/BottomSheet/BottomSheet.stories.svelte +83 -83
  54. package/dist/primitives/BottomSheet/BottomSheet.svelte +100 -100
  55. package/dist/primitives/Breadcrumb/Breadcrumb.spec.js +120 -120
  56. package/dist/primitives/Breadcrumb/Breadcrumb.stories.svelte +23 -23
  57. package/dist/primitives/Breadcrumb/Breadcrumb.svelte +89 -89
  58. package/dist/primitives/Button/Button.spec.js +211 -211
  59. package/dist/primitives/Button/Button.stories.svelte +76 -76
  60. package/dist/primitives/Button/Button.svelte +270 -270
  61. package/dist/primitives/Button/ButtonSaveDemo.spec.js +48 -48
  62. package/dist/primitives/Button/ButtonSaveDemo.svelte +25 -25
  63. package/dist/primitives/Button/ButtonVariantShowcase.svelte +129 -129
  64. package/dist/primitives/Card.spec.js +49 -49
  65. package/dist/primitives/Card.stories.svelte +22 -22
  66. package/dist/primitives/Card.svelte +28 -28
  67. package/dist/primitives/Checkbox/Checkbox.stories.svelte +84 -84
  68. package/dist/primitives/Checkbox/Checkbox.svelte +88 -88
  69. package/dist/primitives/DarkModeToggle.spec.js +357 -357
  70. package/dist/primitives/DarkModeToggle.stories.svelte +57 -57
  71. package/dist/primitives/DarkModeToggle.svelte +136 -136
  72. package/dist/primitives/Drawer/Drawer.stories.svelte +80 -80
  73. package/dist/primitives/Drawer/Drawer.svelte +120 -120
  74. package/dist/primitives/Dropdown/Dropdown.stories.svelte +137 -137
  75. package/dist/primitives/Dropdown/Dropdown.svelte +14 -14
  76. package/dist/primitives/Dropdown/DropdownItem.svelte +80 -80
  77. package/dist/primitives/Icons/ArrowLeft.svelte +8 -8
  78. package/dist/primitives/Icons/ArrowRight.svelte +8 -8
  79. package/dist/primitives/Icons/Availability.svelte +14 -14
  80. package/dist/primitives/Icons/Back.svelte +14 -14
  81. package/dist/primitives/Icons/CheckCircle.svelte +6 -6
  82. package/dist/primitives/Icons/CheckCircleOutline.svelte +15 -15
  83. package/dist/primitives/Icons/ChevronLeft.svelte +4 -4
  84. package/dist/primitives/Icons/ChevronRight.svelte +4 -4
  85. package/dist/primitives/Icons/Copy.svelte +15 -15
  86. package/dist/primitives/Icons/Cross.svelte +5 -5
  87. package/dist/primitives/Icons/DownArrow.svelte +8 -8
  88. package/dist/primitives/Icons/ErrorCircle.svelte +6 -6
  89. package/dist/primitives/Icons/FacebookIcon.svelte +2 -2
  90. package/dist/primitives/Icons/Home.svelte +15 -15
  91. package/dist/primitives/Icons/Icon.spec.js +169 -169
  92. package/dist/primitives/Icons/Icon.stories.svelte +100 -100
  93. package/dist/primitives/Icons/Icon.svelte +52 -52
  94. package/dist/primitives/Icons/IconGallery.stories.svelte +235 -235
  95. package/dist/primitives/Icons/Info.svelte +7 -7
  96. package/dist/primitives/Icons/InstagramIcon.svelte +4 -4
  97. package/dist/primitives/Icons/LogoInstagram.svelte +2 -2
  98. package/dist/primitives/Icons/Message.svelte +15 -15
  99. package/dist/primitives/Icons/MoonIcon.svelte +5 -5
  100. package/dist/primitives/Icons/More.svelte +21 -21
  101. package/dist/primitives/Icons/MoreHori.spec.js +61 -61
  102. package/dist/primitives/Icons/MoreHori.svelte +22 -22
  103. package/dist/primitives/Icons/Notification.svelte +14 -14
  104. package/dist/primitives/Icons/Payment.svelte +14 -14
  105. package/dist/primitives/Icons/Profile.svelte +21 -21
  106. package/dist/primitives/Icons/Reload.svelte +29 -29
  107. package/dist/primitives/Icons/Shows.svelte +21 -21
  108. package/dist/primitives/Icons/Signout.svelte +21 -21
  109. package/dist/primitives/Icons/SunIcon.svelte +8 -8
  110. package/dist/primitives/Icons/TiktokIcon.svelte +2 -2
  111. package/dist/primitives/Icons/TwitterIcon.svelte +2 -2
  112. package/dist/primitives/Icons/WarningIcon.spec.js +18 -18
  113. package/dist/primitives/Icons/WarningIcon.svelte +5 -5
  114. package/dist/primitives/Input/Input.spec.js +573 -573
  115. package/dist/primitives/Input/Input.stories.svelte +139 -139
  116. package/dist/primitives/Input/Input.svelte +392 -392
  117. package/dist/primitives/Input/Select.spec.js +218 -218
  118. package/dist/primitives/Input/Select.stories.svelte +112 -112
  119. package/dist/primitives/Input/Select.svelte +128 -128
  120. package/dist/primitives/Input/Textarea.stories.svelte +137 -137
  121. package/dist/primitives/Input/Textarea.svelte +35 -35
  122. package/dist/primitives/Label/Label.svelte +37 -37
  123. package/dist/primitives/Modal/Modal.spec.js +95 -95
  124. package/dist/primitives/Modal/Modal.stories.svelte +86 -86
  125. package/dist/primitives/Modal/Modal.svelte +158 -158
  126. package/dist/primitives/NumberInput/NumberInput.svelte +106 -106
  127. package/dist/primitives/Pagination/Pagination.stories.svelte +76 -76
  128. package/dist/primitives/Pagination/Pagination.svelte +261 -261
  129. package/dist/primitives/Radio/Radio.stories.svelte +80 -80
  130. package/dist/primitives/Radio/Radio.svelte +67 -67
  131. package/dist/primitives/Skeleton/CardPlaceholder.svelte +87 -87
  132. package/dist/primitives/Skeleton/ImagePlaceholder.svelte +59 -59
  133. package/dist/primitives/Skeleton/ListPlaceholder.svelte +76 -76
  134. package/dist/primitives/Skeleton/Skeleton.stories.svelte +151 -151
  135. package/dist/primitives/Skeleton/Skeleton.svelte +26 -26
  136. package/dist/primitives/Spinner/Spinner.spec.js +75 -75
  137. package/dist/primitives/Spinner/Spinner.stories.svelte +29 -29
  138. package/dist/primitives/Spinner/Spinner.svelte +20 -20
  139. package/dist/primitives/Tabs/TabItem.svelte +49 -49
  140. package/dist/primitives/Tabs/Tabs.stories.svelte +112 -112
  141. package/dist/primitives/Tabs/Tabs.svelte +123 -123
  142. package/dist/primitives/Toggle.spec.js +127 -127
  143. package/dist/primitives/Toggle.stories.svelte +92 -92
  144. package/dist/primitives/Toggle.svelte +71 -71
  145. package/dist/primitives/Typography/Typography.svelte +53 -53
  146. package/dist/primitives/ValidationError.spec.js +103 -103
  147. package/dist/primitives/ValidationError.stories.svelte +69 -69
  148. package/dist/primitives/ValidationError.svelte +29 -29
  149. package/dist/recipes/CropImage/CropImage.spec.js +216 -216
  150. package/dist/recipes/CropImage/CropImage.stories.svelte +104 -104
  151. package/dist/recipes/CropImage/CropImage.svelte +238 -238
  152. package/dist/recipes/ImageUploader/ImageUploader.stories.svelte +125 -125
  153. package/dist/recipes/ImageUploader/ImageUploader.svelte +804 -804
  154. package/dist/recipes/SuperLogin/SuperLogin.svelte +7 -6
  155. package/dist/recipes/SuperLogin/SuperLogin.svelte.d.ts.map +1 -1
  156. package/dist/recipes/Toaster/Toaster.stories.svelte +62 -62
  157. package/dist/recipes/feedback/EmptyState/EmptyState.svelte +1 -1
  158. package/dist/recipes/feedback/ErrorDisplay.spec.js +69 -69
  159. package/dist/recipes/feedback/ErrorDisplay.stories.svelte +101 -101
  160. package/dist/recipes/feedback/ErrorDisplay.svelte +1 -1
  161. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.spec.js +129 -129
  162. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.svelte +157 -157
  163. package/dist/recipes/fields/CheckboxField.svelte +85 -85
  164. package/dist/recipes/fields/FormField.svelte +58 -58
  165. package/dist/recipes/fields/RadioGroup.svelte +95 -95
  166. package/dist/recipes/fields/SelectField.svelte +80 -80
  167. package/dist/recipes/fields/TextareaField.svelte +97 -97
  168. package/dist/recipes/fields/ToggleField.svelte +60 -60
  169. package/dist/recipes/fields/index.js +7 -7
  170. package/dist/recipes/inputs/MultiSelect.spec.js +257 -257
  171. package/dist/recipes/inputs/MultiSelect.stories.svelte +133 -133
  172. package/dist/recipes/inputs/MultiSelect.svelte +249 -249
  173. package/dist/recipes/inputs/OTPInput.spec.js +238 -238
  174. package/dist/recipes/inputs/OTPInput.stories.svelte +162 -162
  175. package/dist/recipes/inputs/OTPInput.svelte +29 -29
  176. package/dist/recipes/inputs/PasswordInput.svelte +22 -22
  177. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.spec.js +173 -173
  178. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte +43 -43
  179. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.spec.js +300 -300
  180. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.stories.svelte +123 -123
  181. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte +326 -326
  182. package/dist/recipes/inputs/Search.svelte +37 -37
  183. package/dist/recipes/inputs/SelectDropdown.svelte +57 -57
  184. package/dist/recipes/modals/AlertModal.svelte +130 -130
  185. package/dist/recipes/modals/ConfirmationModal.spec.js +191 -191
  186. package/dist/recipes/modals/ConfirmationModal.stories.svelte +119 -119
  187. package/dist/recipes/modals/ConfirmationModal.svelte +152 -152
  188. package/dist/recipes/modals/InputModal.svelte +182 -182
  189. package/dist/recipes/modals/ModalStateManager.spec.js +100 -100
  190. package/dist/recipes/modals/ModalStateManager.svelte +77 -77
  191. package/dist/recipes/modals/ModalTestWrapper.svelte +65 -65
  192. package/dist/recipes/modals/StatusModal.svelte +206 -206
  193. package/dist/services/EventService.js +75 -75
  194. package/dist/services/EventService.spec.js +217 -217
  195. package/dist/services/ShowService.spec.js +342 -342
  196. package/dist/stores/auth.js +36 -36
  197. package/dist/stores/auth.spec.js +139 -139
  198. package/dist/stores/toaster.js +13 -13
  199. package/dist/stories/ButtonAuditReview.stories.svelte +14 -14
  200. package/dist/stories/ButtonAuditReview.svelte +427 -427
  201. package/dist/stories/PatternsGallery.stories.svelte +19 -19
  202. package/dist/stories/PatternsGallery.svelte +206 -206
  203. package/dist/stories/PrimitivesGallery.stories.svelte +19 -19
  204. package/dist/stories/PrimitivesGallery.svelte +725 -725
  205. package/dist/stories/RecipesGallery.stories.svelte +19 -19
  206. package/dist/stories/RecipesGallery.svelte +271 -271
  207. package/dist/stories/button-audit-manifest.json +11186 -11186
  208. package/dist/tailwind/preset.cjs +82 -82
  209. package/dist/tokens/tokens.css +87 -87
  210. package/dist/utils/transitions.d.ts +24 -0
  211. package/dist/utils/transitions.d.ts.map +1 -0
  212. package/dist/utils/transitions.js +62 -0
  213. package/dist/utils/utils.js +354 -354
  214. package/package.json +283 -283
@@ -1,19 +1,19 @@
1
- <script module>
2
- import { defineMeta } from '@storybook/addon-svelte-csf';
3
- import RecipesGallery from './RecipesGallery.svelte';
4
-
5
- const { Story } = defineMeta({
6
- title: 'Visual Galleries/Recipes',
7
- component: RecipesGallery,
8
- parameters: {
9
- layout: 'fullscreen',
10
- docs: {
11
- description: {
12
- component: 'Complete visual gallery of all recipe components (Layer 2) - Domain-agnostic compositions.',
13
- },
14
- },
15
- },
16
- });
17
- </script>
18
-
19
- <Story name="All Recipes" />
1
+ <script module>
2
+ import { defineMeta } from '@storybook/addon-svelte-csf';
3
+ import RecipesGallery from './RecipesGallery.svelte';
4
+
5
+ const { Story } = defineMeta({
6
+ title: 'Visual Galleries/Recipes',
7
+ component: RecipesGallery,
8
+ parameters: {
9
+ layout: 'fullscreen',
10
+ docs: {
11
+ description: {
12
+ component: 'Complete visual gallery of all recipe components (Layer 2) - Domain-agnostic compositions.',
13
+ },
14
+ },
15
+ },
16
+ });
17
+ </script>
18
+
19
+ <Story name="All Recipes" />
@@ -1,80 +1,80 @@
1
- <script lang="ts">
2
- // ============================================================================
3
- // RECIPES VISUAL GALLERY
4
- // Displays ALL recipe components (Layer 2) - Domain-agnostic compositions
5
- // ============================================================================
6
-
7
- // Feedback
8
- import EmptyState from '../recipes/feedback/EmptyState/EmptyState.svelte';
9
- import ErrorDisplay from '../recipes/feedback/ErrorDisplay.svelte';
10
- import StatusIndicator from '../recipes/feedback/StatusIndicator/StatusIndicator.svelte';
11
-
12
- // Inputs
13
- import MultiSelect from '../recipes/inputs/MultiSelect.svelte';
14
- import OTPInput from '../recipes/inputs/OTPInput.svelte';
15
- import PasswordInput from '../recipes/inputs/PasswordInput.svelte';
16
- import PasswordStrengthIndicator from '../recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte';
17
- import Search from '../recipes/inputs/Search.svelte';
18
- import SelectDropdown from '../recipes/inputs/SelectDropdown.svelte';
19
-
20
- // Modals
21
- import AlertModal from '../recipes/modals/AlertModal.svelte';
22
- import ConfirmationModal from '../recipes/modals/ConfirmationModal.svelte';
23
- import InputModal from '../recipes/modals/InputModal.svelte';
24
- import StatusModal from '../recipes/modals/StatusModal.svelte';
25
-
26
- // Fields
27
- import CheckboxField from '../recipes/fields/CheckboxField.svelte';
28
- import FormField from '../recipes/fields/FormField.svelte';
29
- import RadioGroup from '../recipes/fields/RadioGroup.svelte';
30
- import SelectField from '../recipes/fields/SelectField.svelte';
31
- import TextareaField from '../recipes/fields/TextareaField.svelte';
32
- import ToggleField from '../recipes/fields/ToggleField.svelte';
33
-
34
- // Primitives for demos
35
- import Button from '../primitives/Button/Button.svelte';
36
- import Card from '../primitives/Card.svelte';
37
-
38
- // State
39
- let isDark = $state(false);
40
-
41
- // Modal states
42
- let showAlertModal = $state(false);
43
- let showConfirmModal = $state(false);
44
- let showInputModal = $state(false);
45
- let showStatusModal = $state(false);
46
- let statusModalType = $state<'success' | 'error' | 'loading'>('success');
47
-
1
+ <script lang="ts">
2
+ // ============================================================================
3
+ // RECIPES VISUAL GALLERY
4
+ // Displays ALL recipe components (Layer 2) - Domain-agnostic compositions
5
+ // ============================================================================
6
+
7
+ // Feedback
8
+ import EmptyState from '../recipes/feedback/EmptyState/EmptyState.svelte';
9
+ import ErrorDisplay from '../recipes/feedback/ErrorDisplay.svelte';
10
+ import StatusIndicator from '../recipes/feedback/StatusIndicator/StatusIndicator.svelte';
11
+
12
+ // Inputs
13
+ import MultiSelect from '../recipes/inputs/MultiSelect.svelte';
14
+ import OTPInput from '../recipes/inputs/OTPInput.svelte';
15
+ import PasswordInput from '../recipes/inputs/PasswordInput.svelte';
16
+ import PasswordStrengthIndicator from '../recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte';
17
+ import Search from '../recipes/inputs/Search.svelte';
18
+ import SelectDropdown from '../recipes/inputs/SelectDropdown.svelte';
19
+
20
+ // Modals
21
+ import AlertModal from '../recipes/modals/AlertModal.svelte';
22
+ import ConfirmationModal from '../recipes/modals/ConfirmationModal.svelte';
23
+ import InputModal from '../recipes/modals/InputModal.svelte';
24
+ import StatusModal from '../recipes/modals/StatusModal.svelte';
25
+
26
+ // Fields
27
+ import CheckboxField from '../recipes/fields/CheckboxField.svelte';
28
+ import FormField from '../recipes/fields/FormField.svelte';
29
+ import RadioGroup from '../recipes/fields/RadioGroup.svelte';
30
+ import SelectField from '../recipes/fields/SelectField.svelte';
31
+ import TextareaField from '../recipes/fields/TextareaField.svelte';
32
+ import ToggleField from '../recipes/fields/ToggleField.svelte';
33
+
34
+ // Primitives for demos
35
+ import Button from '../primitives/Button/Button.svelte';
36
+ import Card from '../primitives/Card.svelte';
37
+
38
+ // State
39
+ let isDark = $state(false);
40
+
41
+ // Modal states
42
+ let showAlertModal = $state(false);
43
+ let showConfirmModal = $state(false);
44
+ let showInputModal = $state(false);
45
+ let showStatusModal = $state(false);
46
+ let statusModalType = $state<'success' | 'error' | 'loading'>('success');
47
+
48
48
  // Input states
49
49
  let otpValue = $state<string[]>(['', '', '', '', '', '']); // OTPInput expects string[]
50
50
  let passwordValue = $state('');
51
51
  let searchValue = $state('');
52
52
  let multiSelectValue = $state<string[]>([]);
53
53
  let selectDropdownValue = $state<{label: string, value: string} | null>(null); // SelectDropdown expects object
54
-
55
- // Field states
56
- let checkboxChecked = $state(false);
57
- let toggleChecked = $state(false);
58
- let radioValue = $state('');
59
- let textareaValue = $state('');
60
- let selectFieldValue = $state('');
61
- let formFieldValue = $state('');
62
-
63
- function toggleDark() {
64
- isDark = !isDark;
65
- document.documentElement.classList.toggle('dark', isDark);
66
- }
67
-
68
- // Section styling
69
- const sectionClass = (dark: boolean) =>
70
- `rounded-xl p-6 ${dark ? 'bg-gray-800 border-gray-700' : 'bg-white border-gray-200'} border`;
71
-
72
- const headingClass = (dark: boolean) =>
73
- `text-xl font-semibold mb-1 ${dark ? 'text-white' : 'text-gray-900'}`;
74
-
75
- const subheadingClass = (dark: boolean) =>
76
- `text-sm mb-4 ${dark ? 'text-gray-400' : 'text-gray-500'}`;
77
-
54
+
55
+ // Field states
56
+ let checkboxChecked = $state(false);
57
+ let toggleChecked = $state(false);
58
+ let radioValue = $state('');
59
+ let textareaValue = $state('');
60
+ let selectFieldValue = $state('');
61
+ let formFieldValue = $state('');
62
+
63
+ function toggleDark() {
64
+ isDark = !isDark;
65
+ document.documentElement.classList.toggle('dark', isDark);
66
+ }
67
+
68
+ // Section styling
69
+ const sectionClass = (dark: boolean) =>
70
+ `rounded-xl p-6 ${dark ? 'bg-gray-800 border-gray-700' : 'bg-white border-gray-200'} border`;
71
+
72
+ const headingClass = (dark: boolean) =>
73
+ `text-xl font-semibold mb-1 ${dark ? 'text-white' : 'text-gray-900'}`;
74
+
75
+ const subheadingClass = (dark: boolean) =>
76
+ `text-sm mb-4 ${dark ? 'text-gray-400' : 'text-gray-500'}`;
77
+
78
78
  // Demo data - MultiSelect uses 'items' with {name, value} format
79
79
  const multiSelectItems = [
80
80
  { value: 'react', name: 'React' },
@@ -98,88 +98,88 @@
98
98
  { value: 'medium', label: 'Medium Priority' },
99
99
  { value: 'high', label: 'High Priority' },
100
100
  ];
101
-
102
- const radioOptions = [
103
- { value: 'daily', label: 'Daily', description: 'Get updates every day' },
104
- { value: 'weekly', label: 'Weekly', description: 'Get updates once a week' },
105
- { value: 'monthly', label: 'Monthly', description: 'Get updates once a month' },
106
- ];
107
- </script>
108
-
109
- <div class="min-h-screen p-6 space-y-8 {isDark ? 'bg-gray-900' : 'bg-gray-50'}">
110
- <!-- Header -->
111
- <div class="flex items-center justify-between mb-8">
112
- <div>
113
- <h1 class="text-3xl font-bold {isDark ? 'text-white' : 'text-gray-900'}">Recipes Gallery</h1>
114
- <p class="{isDark ? 'text-gray-400' : 'text-gray-600'}">Domain-agnostic compositions (Layer 2)</p>
115
- </div>
116
- <button
117
- onclick={toggleDark}
118
- class="px-4 py-2 rounded-lg font-medium {isDark ? 'bg-yellow-500 text-black' : 'bg-gray-800 text-white'}"
119
- >
120
- {isDark ? '☀️ Light' : '🌙 Dark'}
121
- </button>
122
- </div>
123
-
124
- <!-- ========== FEEDBACK COMPONENTS ========== -->
125
- <section class={sectionClass(isDark)}>
126
- <h2 class={headingClass(isDark)}>Feedback Components</h2>
127
- <p class={subheadingClass(isDark)}>EmptyState, ErrorDisplay, StatusIndicator</p>
128
-
129
- <div class="grid grid-cols-1 md:grid-cols-2 gap-6">
130
- <Card>
131
- <p class="text-xs {isDark ? 'text-gray-500' : 'text-gray-400'} mb-2">EmptyState</p>
132
- <EmptyState
133
- title="No items yet"
134
- description="Get started by creating your first item"
135
- >
136
- <Button size="sm">Create Item</Button>
137
- </EmptyState>
138
- </Card>
139
-
140
- <Card>
141
- <p class="text-xs {isDark ? 'text-gray-500' : 'text-gray-400'} mb-2">ErrorDisplay</p>
142
- <ErrorDisplay
143
- title="Something went wrong"
144
- message="We couldn't load the data. Please try again."
145
- >
146
- <Button size="sm" variant="outline">Retry</Button>
147
- </ErrorDisplay>
148
- </Card>
149
- </div>
150
-
151
- <div class="mt-6">
152
- <p class="text-xs {isDark ? 'text-gray-500' : 'text-gray-400'} mb-3">StatusIndicator</p>
153
- <div class="flex flex-wrap gap-6">
154
- <div class="flex items-center gap-2">
155
- <StatusIndicator status="active" />
156
- <span class={isDark ? 'text-white' : 'text-gray-900'}>Active</span>
157
- </div>
158
- <div class="flex items-center gap-2">
159
- <StatusIndicator status="pending" />
160
- <span class={isDark ? 'text-white' : 'text-gray-900'}>Pending</span>
161
- </div>
162
- <div class="flex items-center gap-2">
163
- <StatusIndicator status="inactive" />
164
- <span class={isDark ? 'text-white' : 'text-gray-900'}>Inactive</span>
165
- </div>
166
- <div class="flex items-center gap-2">
167
- <StatusIndicator status="error" />
168
- <span class={isDark ? 'text-white' : 'text-gray-900'}>Error</span>
169
- </div>
170
- <div class="flex items-center gap-2">
171
- <StatusIndicator status="success" />
172
- <span class={isDark ? 'text-white' : 'text-gray-900'}>Success</span>
173
- </div>
174
- </div>
175
- </div>
176
- </section>
177
-
178
- <!-- ========== FORM FIELDS ========== -->
179
- <section class={sectionClass(isDark)}>
180
- <h2 class={headingClass(isDark)}>Form Fields</h2>
181
- <p class={subheadingClass(isDark)}>Composed field components with labels, validation, and help text</p>
182
-
101
+
102
+ const radioOptions = [
103
+ { value: 'daily', label: 'Daily', description: 'Get updates every day' },
104
+ { value: 'weekly', label: 'Weekly', description: 'Get updates once a week' },
105
+ { value: 'monthly', label: 'Monthly', description: 'Get updates once a month' },
106
+ ];
107
+ </script>
108
+
109
+ <div class="min-h-screen p-6 space-y-8 {isDark ? 'bg-gray-900' : 'bg-gray-50'}">
110
+ <!-- Header -->
111
+ <div class="flex items-center justify-between mb-8">
112
+ <div>
113
+ <h1 class="text-3xl font-bold {isDark ? 'text-white' : 'text-gray-900'}">Recipes Gallery</h1>
114
+ <p class="{isDark ? 'text-gray-400' : 'text-gray-600'}">Domain-agnostic compositions (Layer 2)</p>
115
+ </div>
116
+ <button
117
+ onclick={toggleDark}
118
+ class="px-4 py-2 rounded-lg font-medium {isDark ? 'bg-yellow-500 text-black' : 'bg-gray-800 text-white'}"
119
+ >
120
+ {isDark ? '☀️ Light' : '🌙 Dark'}
121
+ </button>
122
+ </div>
123
+
124
+ <!-- ========== FEEDBACK COMPONENTS ========== -->
125
+ <section class={sectionClass(isDark)}>
126
+ <h2 class={headingClass(isDark)}>Feedback Components</h2>
127
+ <p class={subheadingClass(isDark)}>EmptyState, ErrorDisplay, StatusIndicator</p>
128
+
129
+ <div class="grid grid-cols-1 md:grid-cols-2 gap-6">
130
+ <Card>
131
+ <p class="text-xs {isDark ? 'text-gray-500' : 'text-gray-400'} mb-2">EmptyState</p>
132
+ <EmptyState
133
+ title="No items yet"
134
+ description="Get started by creating your first item"
135
+ >
136
+ <Button size="sm">Create Item</Button>
137
+ </EmptyState>
138
+ </Card>
139
+
140
+ <Card>
141
+ <p class="text-xs {isDark ? 'text-gray-500' : 'text-gray-400'} mb-2">ErrorDisplay</p>
142
+ <ErrorDisplay
143
+ title="Something went wrong"
144
+ message="We couldn't load the data. Please try again."
145
+ >
146
+ <Button size="sm" variant="outline">Retry</Button>
147
+ </ErrorDisplay>
148
+ </Card>
149
+ </div>
150
+
151
+ <div class="mt-6">
152
+ <p class="text-xs {isDark ? 'text-gray-500' : 'text-gray-400'} mb-3">StatusIndicator</p>
153
+ <div class="flex flex-wrap gap-6">
154
+ <div class="flex items-center gap-2">
155
+ <StatusIndicator status="active" />
156
+ <span class={isDark ? 'text-white' : 'text-gray-900'}>Active</span>
157
+ </div>
158
+ <div class="flex items-center gap-2">
159
+ <StatusIndicator status="pending" />
160
+ <span class={isDark ? 'text-white' : 'text-gray-900'}>Pending</span>
161
+ </div>
162
+ <div class="flex items-center gap-2">
163
+ <StatusIndicator status="inactive" />
164
+ <span class={isDark ? 'text-white' : 'text-gray-900'}>Inactive</span>
165
+ </div>
166
+ <div class="flex items-center gap-2">
167
+ <StatusIndicator status="error" />
168
+ <span class={isDark ? 'text-white' : 'text-gray-900'}>Error</span>
169
+ </div>
170
+ <div class="flex items-center gap-2">
171
+ <StatusIndicator status="success" />
172
+ <span class={isDark ? 'text-white' : 'text-gray-900'}>Success</span>
173
+ </div>
174
+ </div>
175
+ </div>
176
+ </section>
177
+
178
+ <!-- ========== FORM FIELDS ========== -->
179
+ <section class={sectionClass(isDark)}>
180
+ <h2 class={headingClass(isDark)}>Form Fields</h2>
181
+ <p class={subheadingClass(isDark)}>Composed field components with labels, validation, and help text</p>
182
+
183
183
  <div class="grid grid-cols-1 md:grid-cols-2 gap-6">
184
184
  <div>
185
185
  <FormField
@@ -232,67 +232,67 @@
232
232
  />
233
233
  </div>
234
234
  </div>
235
-
236
- <div class="mt-6 space-y-4">
237
- <CheckboxField
238
- label="I agree to the terms and conditions"
239
- description="You must agree to continue"
240
- bind:checked={checkboxChecked}
241
- />
242
-
243
- <ToggleField
244
- label="Enable notifications"
245
- description="Receive email updates about your account"
246
- bind:checked={toggleChecked}
247
- />
248
-
249
- <div class="max-w-md">
250
- <RadioGroup
251
- label="Update frequency"
252
- options={radioOptions}
253
- bind:value={radioValue}
254
- />
255
- </div>
256
- </div>
257
- </section>
258
-
259
- <!-- ========== SPECIAL INPUTS ========== -->
260
- <section class={sectionClass(isDark)}>
261
- <h2 class={headingClass(isDark)}>Special Inputs</h2>
262
- <p class={subheadingClass(isDark)}>Password, OTP, Search, MultiSelect, SelectDropdown</p>
263
-
264
- <div class="grid grid-cols-1 md:grid-cols-2 gap-8">
265
- <div>
266
- <p class="text-xs {isDark ? 'text-gray-500' : 'text-gray-400'} mb-2">PasswordInput</p>
267
- <PasswordInput
268
- label="Password"
269
- placeholder="Enter password"
270
- bind:value={passwordValue}
271
- />
272
- </div>
273
-
274
- <div>
275
- <p class="text-xs {isDark ? 'text-gray-500' : 'text-gray-400'} mb-2">PasswordStrengthIndicator</p>
276
- <PasswordStrengthIndicator password={passwordValue} />
277
- </div>
278
-
279
- <div>
280
- <p class="text-xs {isDark ? 'text-gray-500' : 'text-gray-400'} mb-2">OTPInput (6 digits)</p>
281
- <OTPInput
282
- length={6}
283
- bind:value={otpValue}
284
- />
285
- <p class="text-sm text-gray-500 mt-2">Value: {otpValue || '(empty)'}</p>
286
- </div>
287
-
288
- <div>
289
- <p class="text-xs {isDark ? 'text-gray-500' : 'text-gray-400'} mb-2">Search</p>
290
- <Search
291
- placeholder="Search..."
292
- bind:value={searchValue}
293
- />
294
- </div>
295
-
235
+
236
+ <div class="mt-6 space-y-4">
237
+ <CheckboxField
238
+ label="I agree to the terms and conditions"
239
+ description="You must agree to continue"
240
+ bind:checked={checkboxChecked}
241
+ />
242
+
243
+ <ToggleField
244
+ label="Enable notifications"
245
+ description="Receive email updates about your account"
246
+ bind:checked={toggleChecked}
247
+ />
248
+
249
+ <div class="max-w-md">
250
+ <RadioGroup
251
+ label="Update frequency"
252
+ options={radioOptions}
253
+ bind:value={radioValue}
254
+ />
255
+ </div>
256
+ </div>
257
+ </section>
258
+
259
+ <!-- ========== SPECIAL INPUTS ========== -->
260
+ <section class={sectionClass(isDark)}>
261
+ <h2 class={headingClass(isDark)}>Special Inputs</h2>
262
+ <p class={subheadingClass(isDark)}>Password, OTP, Search, MultiSelect, SelectDropdown</p>
263
+
264
+ <div class="grid grid-cols-1 md:grid-cols-2 gap-8">
265
+ <div>
266
+ <p class="text-xs {isDark ? 'text-gray-500' : 'text-gray-400'} mb-2">PasswordInput</p>
267
+ <PasswordInput
268
+ label="Password"
269
+ placeholder="Enter password"
270
+ bind:value={passwordValue}
271
+ />
272
+ </div>
273
+
274
+ <div>
275
+ <p class="text-xs {isDark ? 'text-gray-500' : 'text-gray-400'} mb-2">PasswordStrengthIndicator</p>
276
+ <PasswordStrengthIndicator password={passwordValue} />
277
+ </div>
278
+
279
+ <div>
280
+ <p class="text-xs {isDark ? 'text-gray-500' : 'text-gray-400'} mb-2">OTPInput (6 digits)</p>
281
+ <OTPInput
282
+ length={6}
283
+ bind:value={otpValue}
284
+ />
285
+ <p class="text-sm text-gray-500 mt-2">Value: {otpValue || '(empty)'}</p>
286
+ </div>
287
+
288
+ <div>
289
+ <p class="text-xs {isDark ? 'text-gray-500' : 'text-gray-400'} mb-2">Search</p>
290
+ <Search
291
+ placeholder="Search..."
292
+ bind:value={searchValue}
293
+ />
294
+ </div>
295
+
296
296
  <div>
297
297
  <p class="text-xs {isDark ? 'text-gray-500' : 'text-gray-400'} mb-2">MultiSelect</p>
298
298
  <MultiSelect
@@ -311,53 +311,53 @@
311
311
  placeholder="Priority"
312
312
  />
313
313
  </div>
314
- </div>
315
- </section>
316
-
317
- <!-- ========== MODALS ========== -->
318
- <section class={sectionClass(isDark)}>
319
- <h2 class={headingClass(isDark)}>Modals</h2>
320
- <p class={subheadingClass(isDark)}>AlertModal, ConfirmationModal, InputModal, StatusModal</p>
321
-
322
- <div class="flex flex-wrap gap-4">
323
- <Button onclick={() => showAlertModal = true}>
324
- Open AlertModal
325
- </Button>
326
-
327
- <Button variant="alternative" onclick={() => showConfirmModal = true}>
328
- Open ConfirmationModal
329
- </Button>
330
-
331
- <Button variant="outline" onclick={() => showInputModal = true}>
332
- Open InputModal
333
- </Button>
334
-
335
- <Button variant="ghost" onclick={() => {
336
- statusModalType = 'success';
337
- showStatusModal = true;
338
- setTimeout(() => showStatusModal = false, 2000);
339
- }}>
340
- StatusModal (Success)
341
- </Button>
342
-
343
- <Button variant="ghost" onclick={() => {
344
- statusModalType = 'error';
345
- showStatusModal = true;
346
- setTimeout(() => showStatusModal = false, 2000);
347
- }}>
348
- StatusModal (Error)
349
- </Button>
350
-
351
- <Button variant="ghost" onclick={() => {
352
- statusModalType = 'loading';
353
- showStatusModal = true;
354
- setTimeout(() => showStatusModal = false, 2000);
355
- }}>
356
- StatusModal (Loading)
357
- </Button>
358
- </div>
359
- </section>
360
-
314
+ </div>
315
+ </section>
316
+
317
+ <!-- ========== MODALS ========== -->
318
+ <section class={sectionClass(isDark)}>
319
+ <h2 class={headingClass(isDark)}>Modals</h2>
320
+ <p class={subheadingClass(isDark)}>AlertModal, ConfirmationModal, InputModal, StatusModal</p>
321
+
322
+ <div class="flex flex-wrap gap-4">
323
+ <Button onclick={() => showAlertModal = true}>
324
+ Open AlertModal
325
+ </Button>
326
+
327
+ <Button variant="alternative" onclick={() => showConfirmModal = true}>
328
+ Open ConfirmationModal
329
+ </Button>
330
+
331
+ <Button variant="outline" onclick={() => showInputModal = true}>
332
+ Open InputModal
333
+ </Button>
334
+
335
+ <Button variant="ghost" onclick={() => {
336
+ statusModalType = 'success';
337
+ showStatusModal = true;
338
+ setTimeout(() => showStatusModal = false, 2000);
339
+ }}>
340
+ StatusModal (Success)
341
+ </Button>
342
+
343
+ <Button variant="ghost" onclick={() => {
344
+ statusModalType = 'error';
345
+ showStatusModal = true;
346
+ setTimeout(() => showStatusModal = false, 2000);
347
+ }}>
348
+ StatusModal (Error)
349
+ </Button>
350
+
351
+ <Button variant="ghost" onclick={() => {
352
+ statusModalType = 'loading';
353
+ showStatusModal = true;
354
+ setTimeout(() => showStatusModal = false, 2000);
355
+ }}>
356
+ StatusModal (Loading)
357
+ </Button>
358
+ </div>
359
+ </section>
360
+
361
361
  <!-- AlertModal -->
362
362
  <AlertModal
363
363
  bind:show={showAlertModal}
@@ -407,13 +407,13 @@
407
407
  onconfirm={() => showStatusModal = false}
408
408
  onclose={() => showStatusModal = false}
409
409
  />
410
-
411
- <!-- ========== COMMON PATTERNS ========== -->
412
- <section class={sectionClass(isDark)}>
413
- <h2 class={headingClass(isDark)}>Common Recipe Patterns</h2>
414
- <p class={subheadingClass(isDark)}>How recipes compose together</p>
415
-
416
- <div class="space-y-6">
410
+
411
+ <!-- ========== COMMON PATTERNS ========== -->
412
+ <section class={sectionClass(isDark)}>
413
+ <h2 class={headingClass(isDark)}>Common Recipe Patterns</h2>
414
+ <p class={subheadingClass(isDark)}>How recipes compose together</p>
415
+
416
+ <div class="space-y-6">
417
417
  <Card>
418
418
  <h4 class="font-medium mb-4">Registration Form Pattern</h4>
419
419
  <div class="space-y-4 max-w-md">
@@ -466,6 +466,6 @@
466
466
  </div>
467
467
  </div>
468
468
  </Card>
469
- </div>
470
- </section>
471
- </div>
469
+ </div>
470
+ </section>
471
+ </div>