@getmicdrop/svelte-components 5.5.5 → 5.6.0

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