@getmicdrop/svelte-components 5.6.1 → 5.7.2

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 (257) 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/Heading.svelte +58 -0
  10. package/dist/components/Heading.svelte.d.ts +12 -0
  11. package/dist/components/Heading.svelte.d.ts.map +1 -0
  12. package/dist/components/Layout/AppShell.svelte +104 -104
  13. package/dist/components/Layout/ContentSection.svelte +80 -80
  14. package/dist/components/Layout/Grid.svelte +4 -4
  15. package/dist/components/Layout/Heading.svelte +81 -81
  16. package/dist/components/Layout/PageContainer.svelte +69 -69
  17. package/dist/components/Layout/Responsive.svelte +75 -75
  18. package/dist/components/Layout/Section.svelte +80 -80
  19. package/dist/components/Layout/ShowOnDesktop.svelte +37 -37
  20. package/dist/components/Layout/ShowOnMobile.svelte +37 -37
  21. package/dist/components/Layout/Sidebar.svelte +108 -108
  22. package/dist/components/Layout/Stack.spec.js +1 -1
  23. package/dist/components/Layout/Stack.svelte +6 -6
  24. package/dist/components/Layout/Text.svelte +87 -87
  25. package/dist/components/Layout/TwoColumn.svelte +108 -108
  26. package/dist/components/Layout/index.d.ts +10 -0
  27. package/dist/components/Layout/index.d.ts.map +1 -0
  28. package/dist/components/Layout/index.js +14 -0
  29. package/dist/components/Text.svelte +53 -0
  30. package/dist/components/Text.svelte.d.ts +12 -0
  31. package/dist/components/Text.svelte.d.ts.map +1 -0
  32. package/dist/components/index.d.ts +4 -0
  33. package/dist/components/index.d.ts.map +1 -0
  34. package/dist/components/index.js +12 -0
  35. package/dist/constants/validation.js +91 -91
  36. package/dist/constants/validation.spec.js +64 -64
  37. package/dist/datetime/__tests__/format.test.js +1 -1
  38. package/dist/datetime/__tests__/parse.test.js +1 -1
  39. package/dist/datetime/__tests__/timezone.test.js +1 -1
  40. package/dist/datetime/parse.js +1 -1
  41. package/dist/forms/createFormStore.svelte.js +0 -1
  42. package/dist/index.d.ts +1 -1
  43. package/dist/index.js +10 -1
  44. package/dist/patterns/data/DataGrid.svelte +45 -45
  45. package/dist/patterns/data/DataList.svelte +24 -24
  46. package/dist/patterns/data/DataTable.svelte +36 -36
  47. package/dist/patterns/forms/FormActions.spec.js +95 -95
  48. package/dist/patterns/forms/FormActions.stories.svelte +97 -97
  49. package/dist/patterns/forms/FormActions.svelte +46 -46
  50. package/dist/patterns/forms/FormGrid.svelte +33 -33
  51. package/dist/patterns/forms/FormSection.svelte +32 -32
  52. package/dist/patterns/forms/FormValidationSummary.stories.svelte +83 -83
  53. package/dist/patterns/forms/FormValidationSummary.svelte +74 -74
  54. package/dist/patterns/layout/Sidebar.svelte +39 -39
  55. package/dist/patterns/layout/index.d.ts +0 -2
  56. package/dist/patterns/layout/index.js +3 -2
  57. package/dist/patterns/navigation/BottomNav.stories.svelte +117 -117
  58. package/dist/patterns/navigation/BottomNav.svelte +74 -74
  59. package/dist/patterns/navigation/Header.stories.svelte +77 -77
  60. package/dist/patterns/navigation/Header.svelte +193 -193
  61. package/dist/patterns/page/PageHeader.svelte +18 -18
  62. package/dist/patterns/page/PageLayout.svelte +40 -40
  63. package/dist/patterns/page/PageLoader.spec.js +57 -57
  64. package/dist/patterns/page/PageLoader.stories.svelte +137 -137
  65. package/dist/patterns/page/PageLoader.svelte +24 -24
  66. package/dist/patterns/page/SectionHeader.svelte +29 -29
  67. package/dist/presets/badges.js +112 -112
  68. package/dist/presets/buttons.js +76 -76
  69. package/dist/presets/index.js +9 -9
  70. package/dist/primitives/Accordion/Accordion.stories.svelte +75 -75
  71. package/dist/primitives/Accordion/Accordion.svelte +42 -42
  72. package/dist/primitives/Accordion/AccordionItem.svelte +95 -95
  73. package/dist/primitives/Alert/Alert.spec.js +173 -173
  74. package/dist/primitives/Alert/Alert.stories.svelte +88 -88
  75. package/dist/primitives/Alert/Alert.svelte +27 -27
  76. package/dist/primitives/Avatar/Avatar.stories.svelte +94 -94
  77. package/dist/primitives/Avatar/Avatar.svelte +66 -66
  78. package/dist/primitives/Badges/Badge.spec.js +144 -144
  79. package/dist/primitives/Badges/Badge.stories.svelte +86 -86
  80. package/dist/primitives/Badges/Badge.svelte +79 -79
  81. package/dist/primitives/BottomSheet/BottomSheet.spec.js +136 -136
  82. package/dist/primitives/BottomSheet/BottomSheet.stories.svelte +83 -83
  83. package/dist/primitives/BottomSheet/BottomSheet.svelte +100 -100
  84. package/dist/primitives/Breadcrumb/Breadcrumb.spec.js +122 -122
  85. package/dist/primitives/Breadcrumb/Breadcrumb.stories.svelte +23 -23
  86. package/dist/primitives/Breadcrumb/Breadcrumb.svelte +89 -89
  87. package/dist/primitives/Button/Button.spec.js +223 -223
  88. package/dist/primitives/Button/Button.stories.svelte +76 -76
  89. package/dist/primitives/Button/Button.svelte +270 -270
  90. package/dist/primitives/Button/ButtonSaveDemo.spec.js +146 -146
  91. package/dist/primitives/Button/ButtonSaveDemo.svelte +25 -25
  92. package/dist/primitives/Button/ButtonVariantShowcase.svelte +129 -129
  93. package/dist/primitives/Card.spec.js +49 -49
  94. package/dist/primitives/Card.stories.svelte +22 -22
  95. package/dist/primitives/Card.svelte +28 -28
  96. package/dist/primitives/Checkbox/Checkbox.stories.svelte +84 -84
  97. package/dist/primitives/Checkbox/Checkbox.svelte +88 -88
  98. package/dist/primitives/DarkModeToggle.spec.js +390 -390
  99. package/dist/primitives/DarkModeToggle.stories.svelte +57 -57
  100. package/dist/primitives/DarkModeToggle.svelte +136 -136
  101. package/dist/primitives/Drawer/Drawer.stories.svelte +80 -80
  102. package/dist/primitives/Drawer/Drawer.svelte +120 -120
  103. package/dist/primitives/Dropdown/Dropdown.stories.svelte +137 -137
  104. package/dist/primitives/Dropdown/Dropdown.svelte +14 -14
  105. package/dist/primitives/Dropdown/DropdownDivider.svelte +9 -9
  106. package/dist/primitives/Dropdown/DropdownItem.svelte +80 -80
  107. package/dist/primitives/Helper/Helper.svelte +33 -33
  108. package/dist/primitives/Icons/ArrowLeft.svelte +8 -8
  109. package/dist/primitives/Icons/ArrowRight.svelte +8 -8
  110. package/dist/primitives/Icons/Availability.svelte +14 -14
  111. package/dist/primitives/Icons/Back.svelte +14 -14
  112. package/dist/primitives/Icons/CheckCircle.svelte +6 -6
  113. package/dist/primitives/Icons/CheckCircleOutline.svelte +15 -15
  114. package/dist/primitives/Icons/ChevronLeft.svelte +4 -4
  115. package/dist/primitives/Icons/ChevronRight.svelte +4 -4
  116. package/dist/primitives/Icons/Copy.svelte +15 -15
  117. package/dist/primitives/Icons/Cross.svelte +5 -5
  118. package/dist/primitives/Icons/DownArrow.svelte +8 -8
  119. package/dist/primitives/Icons/ErrorCircle.svelte +6 -6
  120. package/dist/primitives/Icons/FacebookIcon.svelte +2 -2
  121. package/dist/primitives/Icons/Home.svelte +15 -15
  122. package/dist/primitives/Icons/Icon.spec.js +169 -169
  123. package/dist/primitives/Icons/Icon.stories.svelte +100 -100
  124. package/dist/primitives/Icons/Icon.svelte +52 -52
  125. package/dist/primitives/Icons/IconGallery.stories.svelte +235 -235
  126. package/dist/primitives/Icons/Info.svelte +7 -7
  127. package/dist/primitives/Icons/InstagramIcon.svelte +4 -4
  128. package/dist/primitives/Icons/LogoInstagram.svelte +2 -2
  129. package/dist/primitives/Icons/Message.svelte +15 -15
  130. package/dist/primitives/Icons/MoonIcon.svelte +5 -5
  131. package/dist/primitives/Icons/More.svelte +21 -21
  132. package/dist/primitives/Icons/MoreHori.spec.js +61 -61
  133. package/dist/primitives/Icons/MoreHori.svelte +22 -22
  134. package/dist/primitives/Icons/Notification.svelte +14 -14
  135. package/dist/primitives/Icons/Payment.svelte +14 -14
  136. package/dist/primitives/Icons/Profile.svelte +21 -21
  137. package/dist/primitives/Icons/Reload.svelte +29 -29
  138. package/dist/primitives/Icons/Shows.svelte +21 -21
  139. package/dist/primitives/Icons/Signout.svelte +21 -21
  140. package/dist/primitives/Icons/SunIcon.svelte +8 -8
  141. package/dist/primitives/Icons/TiktokIcon.svelte +2 -2
  142. package/dist/primitives/Icons/TwitterIcon.svelte +2 -2
  143. package/dist/primitives/Icons/WarningIcon.spec.js +18 -18
  144. package/dist/primitives/Icons/WarningIcon.svelte +5 -5
  145. package/dist/primitives/Input/Input.spec.js +573 -573
  146. package/dist/primitives/Input/Input.stories.svelte +139 -139
  147. package/dist/primitives/Input/Select.spec.js +212 -212
  148. package/dist/primitives/Input/Select.stories.svelte +112 -112
  149. package/dist/primitives/Input/Select.svelte +128 -128
  150. package/dist/primitives/Input/Textarea.stories.svelte +137 -137
  151. package/dist/primitives/Input/Textarea.svelte +35 -35
  152. package/dist/primitives/Label/Label.svelte +37 -37
  153. package/dist/primitives/Modal/Modal.spec.js +99 -99
  154. package/dist/primitives/Modal/Modal.stories.svelte +86 -86
  155. package/dist/primitives/Pagination/Pagination.stories.svelte +76 -76
  156. package/dist/primitives/Pagination/Pagination.svelte +261 -261
  157. package/dist/primitives/Radio/Radio.stories.svelte +80 -80
  158. package/dist/primitives/Radio/Radio.svelte +67 -67
  159. package/dist/primitives/Skeleton/CardPlaceholder.svelte +87 -87
  160. package/dist/primitives/Skeleton/ImagePlaceholder.svelte +59 -59
  161. package/dist/primitives/Skeleton/ListPlaceholder.svelte +76 -76
  162. package/dist/primitives/Skeleton/Skeleton.stories.svelte +151 -151
  163. package/dist/primitives/Skeleton/Skeleton.svelte +26 -26
  164. package/dist/primitives/Spinner/Spinner.spec.js +71 -71
  165. package/dist/primitives/Spinner/Spinner.stories.svelte +29 -29
  166. package/dist/primitives/Spinner/Spinner.svelte +20 -20
  167. package/dist/primitives/Tabs/TabItem.svelte +49 -49
  168. package/dist/primitives/Tabs/Tabs.stories.svelte +112 -112
  169. package/dist/primitives/Tabs/Tabs.svelte +123 -123
  170. package/dist/primitives/Toggle.spec.js +143 -143
  171. package/dist/primitives/Toggle.stories.svelte +92 -92
  172. package/dist/primitives/Tooltip/Tooltip.svelte +83 -83
  173. package/dist/primitives/Typography/Typography.svelte +53 -53
  174. package/dist/primitives/ValidationError.spec.js +103 -103
  175. package/dist/primitives/ValidationError.stories.svelte +69 -69
  176. package/dist/primitives/ValidationError.svelte +29 -29
  177. package/dist/primitives/index.js +91 -91
  178. package/dist/recipes/CropImage/CropImage.spec.js +208 -208
  179. package/dist/recipes/CropImage/CropImage.stories.svelte +104 -104
  180. package/dist/recipes/CropImage/CropImage.svelte +238 -238
  181. package/dist/recipes/ImageUploader/ImageUploader.stories.svelte +125 -125
  182. package/dist/recipes/ImageUploader/ImageUploader.svelte +804 -804
  183. package/dist/recipes/Toaster/Toaster.stories.svelte +62 -62
  184. package/dist/recipes/feedback/EmptyState/EmptyState.svelte +1 -1
  185. package/dist/recipes/feedback/ErrorDisplay.spec.js +69 -69
  186. package/dist/recipes/feedback/ErrorDisplay.stories.svelte +101 -101
  187. package/dist/recipes/feedback/ErrorDisplay.svelte +1 -1
  188. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.spec.js +133 -133
  189. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.svelte +157 -157
  190. package/dist/recipes/fields/CheckboxField.svelte +85 -85
  191. package/dist/recipes/fields/FormField.svelte +58 -58
  192. package/dist/recipes/fields/RadioGroup.svelte +95 -95
  193. package/dist/recipes/fields/SelectField.svelte +80 -80
  194. package/dist/recipes/fields/TextareaField.svelte +97 -97
  195. package/dist/recipes/fields/ToggleField.svelte +60 -60
  196. package/dist/recipes/fields/index.js +7 -7
  197. package/dist/recipes/inputs/MultiSelect.spec.js +258 -258
  198. package/dist/recipes/inputs/MultiSelect.stories.svelte +133 -133
  199. package/dist/recipes/inputs/OTPInput.spec.js +251 -251
  200. package/dist/recipes/inputs/OTPInput.stories.svelte +162 -162
  201. package/dist/recipes/inputs/OTPInput.svelte +29 -29
  202. package/dist/recipes/inputs/PasswordInput.svelte +22 -22
  203. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte +117 -117
  204. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.stories.svelte +123 -123
  205. package/dist/recipes/inputs/Search.svelte +37 -37
  206. package/dist/recipes/inputs/SelectDropdown.svelte +57 -57
  207. package/dist/recipes/modals/AlertModal.svelte +130 -130
  208. package/dist/recipes/modals/ConfirmationModal.spec.js +206 -206
  209. package/dist/recipes/modals/ConfirmationModal.stories.svelte +119 -119
  210. package/dist/recipes/modals/ConfirmationModal.svelte +152 -152
  211. package/dist/recipes/modals/InputModal.svelte +182 -182
  212. package/dist/recipes/modals/ModalStateManager.spec.js +100 -100
  213. package/dist/recipes/modals/ModalStateManager.svelte +77 -77
  214. package/dist/recipes/modals/ModalTestWrapper.svelte +65 -65
  215. package/dist/recipes/modals/StatusModal.svelte +206 -206
  216. package/dist/services/EventService.js +75 -75
  217. package/dist/services/EventService.spec.js +217 -217
  218. package/dist/services/ShowService.spec.js +345 -345
  219. package/dist/stores/auth.js +36 -44
  220. package/dist/stores/auth.spec.js +139 -139
  221. package/dist/stores/formDataStore.d.ts.map +1 -1
  222. package/dist/stores/formDataStore.js +0 -8
  223. package/dist/stores/formSave.d.ts.map +1 -1
  224. package/dist/stores/formSave.js +0 -8
  225. package/dist/stores/navigation.d.ts.map +1 -1
  226. package/dist/stores/navigation.js +0 -8
  227. package/dist/stores/toaster.js +13 -13
  228. package/dist/stories/ButtonAuditReview.stories.svelte +14 -14
  229. package/dist/stories/ButtonAuditReview.svelte +427 -427
  230. package/dist/stories/PatternsGallery.stories.svelte +19 -19
  231. package/dist/stories/PatternsGallery.svelte +206 -206
  232. package/dist/stories/PrimitivesGallery.stories.svelte +19 -19
  233. package/dist/stories/PrimitivesGallery.svelte +725 -725
  234. package/dist/stories/RecipesGallery.stories.svelte +19 -19
  235. package/dist/stories/RecipesGallery.svelte +271 -271
  236. package/dist/stories/button-audit-manifest.json +11186 -11186
  237. package/dist/tailwind/preset.cjs +82 -82
  238. package/dist/telemetry.js +405 -405
  239. package/dist/telemetry.spec.js +1169 -1169
  240. package/dist/tokens/tokens.css +87 -87
  241. package/dist/tokens/typography-base.css +163 -163
  242. package/dist/utils/apiConfig.spec.js +219 -219
  243. package/dist/utils/transitions.js +62 -62
  244. package/dist/utils/utils.js +354 -354
  245. package/package.json +1 -1
  246. package/dist/stores/auth.svelte.d.ts +0 -39
  247. package/dist/stores/auth.svelte.d.ts.map +0 -1
  248. package/dist/stores/auth.svelte.js +0 -60
  249. package/dist/stores/formDataStore.svelte.d.ts +0 -47
  250. package/dist/stores/formDataStore.svelte.d.ts.map +0 -1
  251. package/dist/stores/formDataStore.svelte.js +0 -84
  252. package/dist/stores/formSave.svelte.d.ts +0 -33
  253. package/dist/stores/formSave.svelte.d.ts.map +0 -1
  254. package/dist/stores/formSave.svelte.js +0 -113
  255. package/dist/stores/navigation.svelte.d.ts +0 -35
  256. package/dist/stores/navigation.svelte.d.ts.map +0 -1
  257. package/dist/stores/navigation.svelte.js +0 -69
@@ -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>