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