@getmicdrop/svelte-components 5.21.0 → 5.21.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 (430) hide show
  1. package/dist/calendar/AboutShow/AboutShow.spec.js +10 -10
  2. package/dist/calendar/AboutShow/AboutShow.svelte +191 -191
  3. package/dist/calendar/Calendar/MiniMonthCalendar.spec.js +9 -8
  4. package/dist/calendar/Calendar/MiniMonthCalendar.svelte +800 -803
  5. package/dist/calendar/Calendar/MiniMonthCalendar.svelte.d.ts.map +1 -1
  6. package/dist/calendar/FAQs/FAQs.spec.js +6 -6
  7. package/dist/calendar/FAQs/FAQs.svelte +88 -88
  8. package/dist/calendar/MonthSwitcher/MonthSwitcher.svelte +136 -140
  9. package/dist/calendar/OrderSummary/OrderSummary.svelte +461 -461
  10. package/dist/calendar/PublicCard/PublicCard.spec.js +3 -3
  11. package/dist/calendar/PublicCard/PublicCard.svelte +164 -164
  12. package/dist/calendar/ShowCard/ShowCard.spec.js +8 -8
  13. package/dist/calendar/ShowCard/ShowCard.svelte +180 -180
  14. package/dist/calendar/ShowTimeCard/ShowTimeCard.spec.js +4 -4
  15. package/dist/calendar/ShowTimeCard/ShowTimeCard.svelte +80 -80
  16. package/dist/calendar/index.js +15 -15
  17. package/dist/components/Heading.spec.js +89 -89
  18. package/dist/components/Heading.svelte +66 -66
  19. package/dist/components/Layout/AppShell.svelte +104 -104
  20. package/dist/components/Layout/ContentSection.svelte +80 -80
  21. package/dist/components/Layout/Grid.svelte +101 -101
  22. package/dist/components/Layout/Heading.svelte +81 -81
  23. package/dist/components/Layout/PageContainer.svelte +69 -69
  24. package/dist/components/Layout/Responsive.svelte +75 -75
  25. package/dist/components/Layout/Section.spec.js +4 -4
  26. package/dist/components/Layout/Section.svelte +80 -80
  27. package/dist/components/Layout/ShowOnDesktop.svelte +37 -37
  28. package/dist/components/Layout/ShowOnMobile.svelte +37 -37
  29. package/dist/components/Layout/Sidebar.svelte +108 -108
  30. package/dist/components/Layout/Stack.spec.js +1 -1
  31. package/dist/components/Layout/Stack.svelte +52 -52
  32. package/dist/components/Layout/Text.svelte +87 -87
  33. package/dist/components/Layout/TwoColumn.svelte +108 -108
  34. package/dist/components/Layout/__tests__/AppShell.test.js +5 -5
  35. package/dist/components/Layout/__tests__/ContentSection.test.js +1 -1
  36. package/dist/components/Layout/__tests__/Heading.test.js +3 -3
  37. package/dist/components/Layout/__tests__/PageContainer.test.js +4 -4
  38. package/dist/components/Layout/__tests__/Text.test.js +9 -9
  39. package/dist/components/Text.spec.js +89 -89
  40. package/dist/components/Text.svelte +64 -64
  41. package/dist/config.js +160 -160
  42. package/dist/config.spec.js +29 -29
  43. package/dist/constants/formOptions.js +48 -48
  44. package/dist/constants/validation.js +91 -91
  45. package/dist/constants/validation.spec.js +64 -64
  46. package/dist/datetime/README.md +323 -323
  47. package/dist/datetime/__tests__/format.test.js +1 -1
  48. package/dist/datetime/__tests__/parse.test.js +1 -1
  49. package/dist/datetime/__tests__/timezone.test.js +1 -1
  50. package/dist/datetime/parse.js +1 -1
  51. package/dist/forms/createFormStore.svelte.js +1 -0
  52. package/dist/forms/createFormStore.svelte.spec.js +1 -0
  53. package/dist/index.js +85 -85
  54. package/dist/index.spec.js +369 -369
  55. package/dist/patterns/chat/ChatActivityNotice.spec.js +59 -59
  56. package/dist/patterns/chat/ChatActivityNotice.svelte +41 -41
  57. package/dist/patterns/chat/ChatBubble.spec.js +91 -91
  58. package/dist/patterns/chat/ChatBubble.svelte +103 -103
  59. package/dist/patterns/chat/ChatContainer.spec.js +30 -30
  60. package/dist/patterns/chat/ChatContainer.svelte +46 -46
  61. package/dist/patterns/chat/ChatDateDivider.spec.js +30 -30
  62. package/dist/patterns/chat/ChatDateDivider.svelte +27 -27
  63. package/dist/patterns/chat/ChatInvitationBubble.spec.js +46 -46
  64. package/dist/patterns/chat/ChatInvitationBubble.svelte +46 -46
  65. package/dist/patterns/chat/ChatInvitationNotice.spec.js +32 -32
  66. package/dist/patterns/chat/ChatInvitationNotice.svelte +36 -36
  67. package/dist/patterns/chat/ChatMessageGroup.spec.js +58 -58
  68. package/dist/patterns/chat/ChatMessageGroup.svelte +57 -57
  69. package/dist/patterns/chat/ChatSlotUpdate.spec.js +65 -65
  70. package/dist/patterns/chat/ChatSlotUpdate.svelte +46 -46
  71. package/dist/patterns/chat/ChatStatusBadge.spec.js +79 -79
  72. package/dist/patterns/chat/ChatStatusBadge.svelte +91 -91
  73. package/dist/patterns/chat/ChatStatusTransition.spec.js +81 -81
  74. package/dist/patterns/chat/ChatStatusTransition.svelte +64 -64
  75. package/dist/patterns/chat/ChatTextBubble.spec.js +35 -35
  76. package/dist/patterns/chat/ChatTextBubble.svelte +41 -41
  77. package/dist/patterns/chat/index.js +22 -22
  78. package/dist/patterns/data/DataGrid.svelte +45 -45
  79. package/dist/patterns/data/DataList.spec.js +5 -5
  80. package/dist/patterns/data/DataList.svelte +24 -24
  81. package/dist/patterns/data/DataTable.spec.js +18 -18
  82. package/dist/patterns/data/DataTable.svelte +45 -45
  83. package/dist/patterns/data/index.js +4 -4
  84. package/dist/patterns/forms/FormActions.spec.js +95 -95
  85. package/dist/patterns/forms/FormActions.stories.svelte +97 -97
  86. package/dist/patterns/forms/FormActions.svelte +46 -46
  87. package/dist/patterns/forms/FormGrid.svelte +33 -33
  88. package/dist/patterns/forms/FormSection.spec.js +4 -4
  89. package/dist/patterns/forms/FormSection.svelte +33 -33
  90. package/dist/patterns/forms/FormValidationSummary.spec.js +2 -2
  91. package/dist/patterns/forms/FormValidationSummary.stories.svelte +97 -97
  92. package/dist/patterns/forms/FormValidationSummary.svelte +82 -82
  93. package/dist/patterns/forms/index.js +5 -5
  94. package/dist/patterns/index.js +21 -21
  95. package/dist/patterns/layout/Sidebar.svelte +39 -39
  96. package/dist/patterns/layout/SidebarTestWrapper.svelte +34 -34
  97. package/dist/patterns/layout/Stack.svelte +61 -61
  98. package/dist/patterns/layout/index.js +29 -29
  99. package/dist/patterns/navigation/BottomNav.stories.svelte +117 -117
  100. package/dist/patterns/navigation/BottomNav.svelte +82 -82
  101. package/dist/patterns/navigation/Header.spec.js +9 -9
  102. package/dist/patterns/navigation/Header.stories.svelte +77 -77
  103. package/dist/patterns/navigation/Header.svelte +261 -263
  104. package/dist/patterns/navigation/Header.svelte.d.ts.map +1 -1
  105. package/dist/patterns/navigation/index.js +3 -3
  106. package/dist/patterns/page/PageHeader.svelte +49 -49
  107. package/dist/patterns/page/PageLayout.spec.js +5 -5
  108. package/dist/patterns/page/PageLayout.svelte +40 -40
  109. package/dist/patterns/page/PageLoader.spec.js +57 -57
  110. package/dist/patterns/page/PageLoader.stories.svelte +137 -137
  111. package/dist/patterns/page/PageLoader.svelte +62 -62
  112. package/dist/patterns/page/SectionHeader.spec.js +8 -8
  113. package/dist/patterns/page/SectionHeader.svelte +51 -51
  114. package/dist/patterns/page/index.js +5 -5
  115. package/dist/presets/badges.js +112 -112
  116. package/dist/presets/buttons.js +76 -76
  117. package/dist/presets/buttons.spec.js +4 -4
  118. package/dist/presets/index.js +9 -9
  119. package/dist/primitives/Accordion/Accordion.spec.js +5 -5
  120. package/dist/primitives/Accordion/Accordion.stories.svelte +75 -75
  121. package/dist/primitives/Accordion/Accordion.svelte +62 -62
  122. package/dist/primitives/Accordion/AccordionItem.spec.js +19 -28
  123. package/dist/primitives/Accordion/AccordionItem.svelte +103 -103
  124. package/dist/primitives/Accordion/AccordionItemWrapper.test.svelte +107 -107
  125. package/dist/primitives/Accordion/AccordionToggleWrapper.test.svelte +28 -28
  126. package/dist/primitives/Alert/Alert.spec.js +173 -173
  127. package/dist/primitives/Alert/Alert.stories.svelte +88 -88
  128. package/dist/primitives/Alert/Alert.svelte +72 -72
  129. package/dist/primitives/Avatar/Avatar.spec.js +11 -11
  130. package/dist/primitives/Avatar/Avatar.stories.svelte +95 -94
  131. package/dist/primitives/Avatar/Avatar.stories.svelte.d.ts.map +1 -1
  132. package/dist/primitives/Avatar/Avatar.svelte +66 -66
  133. package/dist/primitives/AvatarButton/AvatarButton.svelte +57 -57
  134. package/dist/primitives/Badges/Badge.spec.js +144 -144
  135. package/dist/primitives/Badges/Badge.stories.svelte +86 -86
  136. package/dist/primitives/Badges/Badge.svelte +99 -99
  137. package/dist/primitives/BottomSheet/BottomSheet.spec.js +238 -238
  138. package/dist/primitives/BottomSheet/BottomSheet.stories.svelte +83 -83
  139. package/dist/primitives/BottomSheet/BottomSheet.svelte +115 -115
  140. package/dist/primitives/BottomSheet/BottomSheetWithActions.test.svelte +20 -20
  141. package/dist/primitives/Breadcrumb/Breadcrumb.spec.js +125 -123
  142. package/dist/primitives/Breadcrumb/Breadcrumb.stories.svelte +23 -23
  143. package/dist/primitives/Breadcrumb/Breadcrumb.svelte +107 -107
  144. package/dist/primitives/Button/Button.spec.js +225 -225
  145. package/dist/primitives/Button/Button.stories.svelte +76 -76
  146. package/dist/primitives/Button/Button.svelte +278 -278
  147. package/dist/primitives/Button/ButtonGroup.spec.js +44 -44
  148. package/dist/primitives/Button/ButtonGroup.svelte +50 -50
  149. package/dist/primitives/Button/ButtonSaveDemo.spec.js +146 -146
  150. package/dist/primitives/Button/ButtonSaveDemo.svelte +25 -25
  151. package/dist/primitives/Button/ButtonVariantShowcase.spec.js +1 -1
  152. package/dist/primitives/Button/ButtonVariantShowcase.svelte +129 -129
  153. package/dist/primitives/Card.spec.js +49 -49
  154. package/dist/primitives/Card.stories.svelte +22 -22
  155. package/dist/primitives/Card.svelte +28 -28
  156. package/dist/primitives/CardAction/CardAction.svelte +68 -68
  157. package/dist/primitives/Checkbox/Checkbox.spec.js +16 -16
  158. package/dist/primitives/Checkbox/Checkbox.stories.svelte +84 -84
  159. package/dist/primitives/Checkbox/Checkbox.svelte +88 -88
  160. package/dist/primitives/DarkModeToggle.spec.js +390 -390
  161. package/dist/primitives/DarkModeToggle.stories.svelte +57 -57
  162. package/dist/primitives/DarkModeToggle.svelte +147 -147
  163. package/dist/primitives/Drawer/Drawer.spec.js +4 -4
  164. package/dist/primitives/Drawer/Drawer.stories.svelte +100 -100
  165. package/dist/primitives/Drawer/Drawer.svelte +224 -224
  166. package/dist/primitives/Drawer/DrawerTestWrapper.svelte +86 -86
  167. package/dist/primitives/Dropdown/Dropdown.spec.js +9 -9
  168. package/dist/primitives/Dropdown/Dropdown.stories.svelte +137 -137
  169. package/dist/primitives/Dropdown/Dropdown.svelte +179 -179
  170. package/dist/primitives/Dropdown/DropdownDivider.spec.js +30 -30
  171. package/dist/primitives/Dropdown/DropdownDivider.svelte +9 -9
  172. package/dist/primitives/Dropdown/DropdownItem.spec.js +8 -15
  173. package/dist/primitives/Dropdown/DropdownItem.svelte +80 -80
  174. package/dist/primitives/Dropdown/DropdownItemTestWrapper.svelte +43 -43
  175. package/dist/primitives/Helper/Helper.spec.js +57 -57
  176. package/dist/primitives/Helper/Helper.svelte +33 -33
  177. package/dist/primitives/Icons/ArrowLeft.svelte +21 -21
  178. package/dist/primitives/Icons/ArrowRight.svelte +21 -21
  179. package/dist/primitives/Icons/Availability.svelte +27 -27
  180. package/dist/primitives/Icons/Back.svelte +27 -27
  181. package/dist/primitives/Icons/CheckCircle.svelte +19 -19
  182. package/dist/primitives/Icons/CheckCircleOutline.svelte +28 -28
  183. package/dist/primitives/Icons/ChevronLeft.svelte +17 -17
  184. package/dist/primitives/Icons/ChevronRight.svelte +17 -17
  185. package/dist/primitives/Icons/Copy.svelte +28 -28
  186. package/dist/primitives/Icons/Cross.svelte +18 -18
  187. package/dist/primitives/Icons/DownArrow.svelte +21 -21
  188. package/dist/primitives/Icons/ErrorCircle.svelte +19 -19
  189. package/dist/primitives/Icons/FacebookIcon.svelte +15 -15
  190. package/dist/primitives/Icons/Home.svelte +28 -28
  191. package/dist/primitives/Icons/Icon.spec.js +175 -175
  192. package/dist/primitives/Icons/Icon.stories.svelte +100 -100
  193. package/dist/primitives/Icons/Icon.svelte +79 -79
  194. package/dist/primitives/Icons/IconGallery.stories.svelte +235 -235
  195. package/dist/primitives/Icons/Icons.spec.js +3 -3
  196. package/dist/primitives/Icons/ImageOutline.svelte +21 -21
  197. package/dist/primitives/Icons/Info.svelte +20 -20
  198. package/dist/primitives/Icons/InstagramIcon.svelte +21 -21
  199. package/dist/primitives/Icons/LogoInstagram.svelte +15 -15
  200. package/dist/primitives/Icons/Message.svelte +28 -28
  201. package/dist/primitives/Icons/MoonIcon.svelte +18 -18
  202. package/dist/primitives/Icons/More.svelte +34 -34
  203. package/dist/primitives/Icons/MoreHori.spec.js +67 -67
  204. package/dist/primitives/Icons/MoreHori.svelte +35 -35
  205. package/dist/primitives/Icons/Notification.svelte +27 -27
  206. package/dist/primitives/Icons/Payment.svelte +27 -27
  207. package/dist/primitives/Icons/Profile.svelte +34 -34
  208. package/dist/primitives/Icons/Reload.svelte +42 -42
  209. package/dist/primitives/Icons/Shows.svelte +34 -34
  210. package/dist/primitives/Icons/Signout.svelte +34 -34
  211. package/dist/primitives/Icons/SunIcon.svelte +21 -21
  212. package/dist/primitives/Icons/TiktokIcon.svelte +15 -15
  213. package/dist/primitives/Icons/TrashBinOutline.svelte +21 -21
  214. package/dist/primitives/Icons/TwitterIcon.svelte +15 -15
  215. package/dist/primitives/Icons/WarningIcon.spec.js +30 -30
  216. package/dist/primitives/Icons/WarningIcon.svelte +24 -24
  217. package/dist/primitives/Input/Input.spec.js +1237 -1237
  218. package/dist/primitives/Input/Input.stories.svelte +139 -139
  219. package/dist/primitives/Input/Input.svelte +444 -444
  220. package/dist/primitives/Input/Select.spec.js +632 -632
  221. package/dist/primitives/Input/Select.stories.svelte +112 -112
  222. package/dist/primitives/Input/Select.svelte +252 -252
  223. package/dist/primitives/Input/Textarea.spec.js +8 -8
  224. package/dist/primitives/Input/Textarea.stories.svelte +137 -137
  225. package/dist/primitives/Input/Textarea.svelte +105 -105
  226. package/dist/primitives/Label/Label.spec.js +20 -21
  227. package/dist/primitives/Label/Label.svelte +37 -37
  228. package/dist/primitives/LandingButton/LandingButton.spec.js +61 -61
  229. package/dist/primitives/LandingButton/LandingButton.svelte +92 -92
  230. package/dist/primitives/MenuItem/MenuItem.spec.js +130 -130
  231. package/dist/primitives/MenuItem/MenuItem.svelte +85 -85
  232. package/dist/primitives/Modal/Modal.spec.js +314 -314
  233. package/dist/primitives/Modal/Modal.stories.svelte +86 -86
  234. package/dist/primitives/Modal/Modal.svelte +181 -181
  235. package/dist/primitives/NavItem/NavItem.spec.js +97 -97
  236. package/dist/primitives/NavItem/NavItem.svelte +75 -75
  237. package/dist/primitives/NumberInput/NumberInput.spec.js +17 -17
  238. package/dist/primitives/NumberInput/NumberInput.svelte +113 -113
  239. package/dist/primitives/Pagination/DotIndicator.svelte +66 -66
  240. package/dist/primitives/Pagination/Pagination.spec.js +6 -6
  241. package/dist/primitives/Pagination/Pagination.stories.svelte +76 -76
  242. package/dist/primitives/Pagination/Pagination.svelte +275 -275
  243. package/dist/primitives/Radio/Radio.spec.js +19 -19
  244. package/dist/primitives/Radio/Radio.stories.svelte +80 -80
  245. package/dist/primitives/Radio/Radio.svelte +67 -67
  246. package/dist/primitives/SearchResultItem/SearchResultItem.spec.js +78 -78
  247. package/dist/primitives/SearchResultItem/SearchResultItem.svelte +109 -109
  248. package/dist/primitives/SidebarToggle/SidebarToggle.spec.js +61 -61
  249. package/dist/primitives/SidebarToggle/SidebarToggle.svelte +55 -55
  250. package/dist/primitives/Skeleton/CardPlaceholder.spec.js +1 -1
  251. package/dist/primitives/Skeleton/CardPlaceholder.svelte +96 -96
  252. package/dist/primitives/Skeleton/ImagePlaceholder.spec.js +2 -2
  253. package/dist/primitives/Skeleton/ImagePlaceholder.svelte +68 -68
  254. package/dist/primitives/Skeleton/ListPlaceholder.spec.js +2 -2
  255. package/dist/primitives/Skeleton/ListPlaceholder.svelte +85 -85
  256. package/dist/primitives/Skeleton/Skeleton.spec.js +7 -7
  257. package/dist/primitives/Skeleton/Skeleton.stories.svelte +151 -151
  258. package/dist/primitives/Skeleton/Skeleton.svelte +55 -55
  259. package/dist/primitives/Spinner/Spinner.spec.js +83 -84
  260. package/dist/primitives/Spinner/Spinner.stories.svelte +29 -29
  261. package/dist/primitives/Spinner/Spinner.svelte +52 -52
  262. package/dist/primitives/Tabs/TabItem.svelte +52 -52
  263. package/dist/primitives/Tabs/Tabs.spec.js +14 -14
  264. package/dist/primitives/Tabs/Tabs.stories.svelte +112 -112
  265. package/dist/primitives/Tabs/Tabs.svelte +137 -137
  266. package/dist/primitives/Toggle.spec.js +219 -221
  267. package/dist/primitives/Toggle.stories.svelte +92 -92
  268. package/dist/primitives/Toggle.svelte +141 -141
  269. package/dist/primitives/ToggleTestWrapper.svelte +30 -30
  270. package/dist/primitives/Tooltip/Tooltip.spec.js +126 -126
  271. package/dist/primitives/Tooltip/Tooltip.svelte +83 -83
  272. package/dist/primitives/Typography/Typography.svelte +53 -53
  273. package/dist/primitives/ValidationError.spec.js +103 -103
  274. package/dist/primitives/ValidationError.stories.svelte +112 -112
  275. package/dist/primitives/ValidationError.svelte +29 -29
  276. package/dist/primitives/index.js +114 -114
  277. package/dist/recipes/CropImage/CropImage.spec.js +208 -208
  278. package/dist/recipes/CropImage/CropImage.stories.svelte +104 -104
  279. package/dist/recipes/CropImage/CropImage.svelte +241 -241
  280. package/dist/recipes/ImageUploader/ImageUploader.spec.js +1 -1
  281. package/dist/recipes/ImageUploader/ImageUploader.stories.svelte +125 -125
  282. package/dist/recipes/ImageUploader/ImageUploader.svelte +972 -994
  283. package/dist/recipes/SuperLogin/SuperLogin.svelte +24 -24
  284. package/dist/recipes/Toaster/Toaster.stories.svelte +62 -62
  285. package/dist/recipes/feedback/EmptyState/EmptyState.svelte +75 -75
  286. package/dist/recipes/feedback/ErrorDisplay.spec.js +69 -69
  287. package/dist/recipes/feedback/ErrorDisplay.stories.svelte +113 -113
  288. package/dist/recipes/feedback/ErrorDisplay.svelte +67 -67
  289. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.spec.js +133 -133
  290. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.svelte +176 -176
  291. package/dist/recipes/feedback/index.js +4 -4
  292. package/dist/recipes/fields/CheckboxField.spec.js +2 -2
  293. package/dist/recipes/fields/CheckboxField.svelte +85 -85
  294. package/dist/recipes/fields/FormField.spec.js +4 -4
  295. package/dist/recipes/fields/FormField.svelte +58 -58
  296. package/dist/recipes/fields/RadioGroup.spec.js +1 -1
  297. package/dist/recipes/fields/RadioGroup.svelte +95 -95
  298. package/dist/recipes/fields/SelectField.spec.js +2 -2
  299. package/dist/recipes/fields/SelectField.svelte +82 -82
  300. package/dist/recipes/fields/TextareaField.spec.js +2 -2
  301. package/dist/recipes/fields/TextareaField.svelte +101 -101
  302. package/dist/recipes/fields/ToggleField.spec.js +2 -2
  303. package/dist/recipes/fields/ToggleField.svelte +60 -60
  304. package/dist/recipes/fields/index.js +7 -7
  305. package/dist/recipes/index.js +24 -24
  306. package/dist/recipes/inputs/MultiSelect.spec.js +263 -263
  307. package/dist/recipes/inputs/MultiSelect.stories.svelte +133 -133
  308. package/dist/recipes/inputs/MultiSelect.svelte +291 -291
  309. package/dist/recipes/inputs/OTPInput.spec.js +251 -251
  310. package/dist/recipes/inputs/OTPInput.stories.svelte +162 -162
  311. package/dist/recipes/inputs/OTPInput.svelte +128 -128
  312. package/dist/recipes/inputs/PasswordInput.spec.js +2 -2
  313. package/dist/recipes/inputs/PasswordInput.svelte +130 -130
  314. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.spec.js +14 -14
  315. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte +142 -142
  316. package/dist/recipes/inputs/PasswordStrengthIndicator/TestWrapper.svelte +2 -2
  317. package/dist/recipes/inputs/PhoneInput.svelte +254 -254
  318. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.spec.js +10 -10
  319. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.stories.svelte +170 -170
  320. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte +346 -349
  321. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte.d.ts.map +1 -1
  322. package/dist/recipes/inputs/Search.spec.js +3 -3
  323. package/dist/recipes/inputs/Search.svelte +110 -110
  324. package/dist/recipes/inputs/index.js +8 -8
  325. package/dist/recipes/inputs/phoneInput/CountrySelector.svelte +240 -240
  326. package/dist/recipes/modals/AlertModal.spec.js +36 -36
  327. package/dist/recipes/modals/AlertModal.svelte +139 -139
  328. package/dist/recipes/modals/ConfirmationModal.spec.js +396 -396
  329. package/dist/recipes/modals/ConfirmationModal.stories.svelte +119 -119
  330. package/dist/recipes/modals/ConfirmationModal.svelte +169 -169
  331. package/dist/recipes/modals/FeedbackModal.svelte +205 -205
  332. package/dist/recipes/modals/InputModal.spec.js +17 -17
  333. package/dist/recipes/modals/InputModal.svelte +194 -194
  334. package/dist/recipes/modals/ModalStateManager.spec.js +100 -100
  335. package/dist/recipes/modals/ModalStateManager.svelte +77 -77
  336. package/dist/recipes/modals/ModalTestWrapper.svelte +65 -65
  337. package/dist/recipes/modals/StatusModal.spec.js +7 -7
  338. package/dist/recipes/modals/StatusModal.svelte +216 -216
  339. package/dist/recipes/modals/index.js +8 -8
  340. package/dist/schemas/__tests__/order.test.js +1 -1
  341. package/dist/schemas/auth.d.ts +107 -17
  342. package/dist/schemas/auth.d.ts.map +1 -1
  343. package/dist/schemas/common.d.ts +41 -13
  344. package/dist/schemas/common.d.ts.map +1 -1
  345. package/dist/schemas/common.js +1 -1
  346. package/dist/schemas/event.d.ts +147 -41
  347. package/dist/schemas/event.d.ts.map +1 -1
  348. package/dist/schemas/event.js +1 -1
  349. package/dist/schemas/order.d.ts +208 -51
  350. package/dist/schemas/order.d.ts.map +1 -1
  351. package/dist/schemas/order.js +1 -0
  352. package/dist/schemas/performer.d.ts +199 -44
  353. package/dist/schemas/performer.d.ts.map +1 -1
  354. package/dist/schemas/performer.js +1 -1
  355. package/dist/schemas/promo.d.ts +221 -55
  356. package/dist/schemas/promo.d.ts.map +1 -1
  357. package/dist/schemas/promo.js +2 -2
  358. package/dist/schemas/ticket.d.ts +187 -61
  359. package/dist/schemas/ticket.d.ts.map +1 -1
  360. package/dist/schemas/ticket.js +1 -1
  361. package/dist/schemas/user.d.ts +114 -54
  362. package/dist/schemas/user.d.ts.map +1 -1
  363. package/dist/schemas/user.js +2 -1
  364. package/dist/schemas/venue.d.ts +238 -20
  365. package/dist/schemas/venue.d.ts.map +1 -1
  366. package/dist/services/show.service.d.ts +46 -46
  367. package/dist/stores/auth.d.ts +8 -8
  368. package/dist/stores/auth.svelte.spec.js +1 -1
  369. package/dist/stores/index.js +9 -9
  370. package/dist/stores/toaster.d.ts +3 -3
  371. package/dist/stores/toaster.js +13 -13
  372. package/dist/stores/toaster.spec.js +59 -59
  373. package/dist/stories/ButtonAuditDashboard.spec.js +12 -12
  374. package/dist/stories/ButtonAuditDashboard.svelte +55 -55
  375. package/dist/stories/ButtonAuditReview.spec.js +8 -8
  376. package/dist/stories/ButtonAuditReview.stories.svelte +14 -14
  377. package/dist/stories/ButtonAuditReview.svelte +427 -427
  378. package/dist/stories/ButtonGridView.spec.js +27 -27
  379. package/dist/stories/ButtonGridView.svelte +22 -22
  380. package/dist/stories/ButtonShowcase.spec.js +4 -4
  381. package/dist/stories/ButtonShowcase.svelte +119 -119
  382. package/dist/stories/ComponentConsolidation.stories.svelte +453 -453
  383. package/dist/stories/DesignSystemAudit.stories.svelte +127 -127
  384. package/dist/stories/PatternsGallery.spec.js +3 -3
  385. package/dist/stories/PatternsGallery.stories.svelte +19 -19
  386. package/dist/stories/PatternsGallery.svelte +399 -399
  387. package/dist/stories/PrimitivesGallery.spec.js +9 -9
  388. package/dist/stories/PrimitivesGallery.stories.svelte +19 -19
  389. package/dist/stories/PrimitivesGallery.svelte +756 -756
  390. package/dist/stories/RecipesGallery.stories.svelte +19 -19
  391. package/dist/stories/RecipesGallery.svelte +454 -454
  392. package/dist/stories/button-audit-manifest.json +11186 -11186
  393. package/dist/tailwind/preset.cjs +107 -87
  394. package/dist/tailwind/preset.d.cts +16 -0
  395. package/dist/tailwind/preset.d.cts.map +1 -1
  396. package/dist/telemetry.js +401 -401
  397. package/dist/telemetry.server.js +212 -212
  398. package/dist/telemetry.server.spec.js +437 -437
  399. package/dist/telemetry.spec.js +1273 -1273
  400. package/dist/tokens/__tests__/typography-base.test.js +5 -5
  401. package/dist/tokens/__tests__/typography.test.js +32 -36
  402. package/dist/tokens/__tests__/variants.test.js +63 -78
  403. package/dist/tokens/tokens.css +123 -87
  404. package/dist/tokens/typography-base.css +163 -163
  405. package/dist/tokens/typography.d.ts +29 -29
  406. package/dist/tokens/typography.js +29 -29
  407. package/dist/tokens/utilities.css +418 -430
  408. package/dist/tokens/variants.d.ts +32 -32
  409. package/dist/tokens/variants.js +32 -32
  410. package/dist/utils/__tests__/auth.test.js +431 -431
  411. package/dist/utils/apiConfig.d.ts +29 -29
  412. package/dist/utils/apiConfig.js +142 -142
  413. package/dist/utils/auth.d.ts +46 -46
  414. package/dist/utils/auth.js +195 -195
  415. package/dist/utils/greetings.js +187 -187
  416. package/dist/utils/greetings.spec.js +337 -337
  417. package/dist/utils/haptic.spec.js +1 -1
  418. package/dist/utils/imageValidation.js +121 -121
  419. package/dist/utils/imageValidation.spec.js +223 -223
  420. package/dist/utils/portal.d.ts +11 -11
  421. package/dist/utils/portal.js +25 -25
  422. package/dist/utils/portal.spec.js +143 -143
  423. package/dist/utils/transitions.js +16 -16
  424. package/dist/utils/utils/utils.d.ts +2 -2
  425. package/dist/utils/utils/utils.js +3 -3
  426. package/dist/utils/utils/utils.spec.js +698 -698
  427. package/dist/utils/utils.d.ts +41 -41
  428. package/dist/utils/utils.js +59 -59
  429. package/dist/utils/utils.spec.js +643 -643
  430. package/package.json +306 -306
@@ -1,130 +1,130 @@
1
- <script lang="ts">
2
- /**
3
- * PasswordInput - Password field with show/hide toggle and strength indicator
4
- *
5
- * Combines Input (password type) with PasswordStrengthIndicator for
6
- * a complete password entry experience.
7
- *
8
- * @example
9
- * <PasswordInput
10
- * label="New Password"
11
- * bind:value={password}
12
- * showStrength
13
- * error={$errors.password}
14
- * required
15
- * />
16
- */
17
- import Input from '../../primitives/Input/Input.svelte';
18
- import PasswordStrengthIndicator from './PasswordStrengthIndicator/PasswordStrengthIndicator.svelte';
19
-
20
- const defaultLabels = {
21
- passwordStrength: 'Password strength:',
22
- };
23
-
24
- interface Props {
25
- /** Password value */
26
- value?: string;
27
- /** Label text */
28
- label?: string;
29
- /** Placeholder text */
30
- placeholder?: string;
31
- /** Input name attribute */
32
- name?: string;
33
- /** Input id attribute */
34
- id?: string;
35
- /** Whether the field is required */
36
- required?: boolean;
37
- /** Whether the field is disabled */
38
- disabled?: boolean;
39
- /** Error message to display */
40
- error?: string;
41
- /** Hint text shown below input */
42
- hint?: string;
43
- /** Show password strength indicator */
44
- showStrength?: boolean;
45
- /** Size variant */
46
- size?: 'sm' | 'md' | 'lg';
47
- /** Minimum password length */
48
- minlength?: number | null;
49
- /** Maximum password length */
50
- maxlength?: number | null;
51
- /** Autocomplete attribute */
52
- autocomplete?: string;
53
- /** Whether to show the password toggle button */
54
- showPasswordToggle?: boolean;
55
- /** Additional class for the wrapper div */
56
- class?: string;
57
- // Optional callbacks (matching Input component signatures)
58
- oninput?: (value: string) => void;
59
- onblur?: () => void;
60
- onfocus?: () => void;
61
- /** Override user-visible strings */
62
- labels?: Partial<typeof defaultLabels>;
63
- }
64
-
65
- let {
66
- value = $bindable(''),
67
- label = '',
68
- placeholder = '',
69
- name = '',
70
- id = '',
71
- required = false,
72
- disabled = false,
73
- error = '',
74
- hint = '',
75
- showStrength = false,
76
- size = 'md',
77
- minlength = null,
78
- maxlength = null,
79
- autocomplete = 'new-password',
80
- showPasswordToggle = true,
81
- class: className = '',
82
- oninput,
83
- onblur,
84
- onfocus,
85
- labels: userLabels = {},
86
- }: Props = $props();
87
-
88
- let labels = $derived({ ...defaultLabels, ...userLabels });
89
-
90
- // Password strength tracking
91
- let strengthScore = $state(-1);
92
- let strengthText = $state('');
93
- let strengthColor = $state('');
94
- </script>
95
-
96
- <div class={className}>
97
- <Input
98
- type="password"
99
- {id}
100
- {name}
101
- {placeholder}
102
- {label}
103
- {required}
104
- {disabled}
105
- {size}
106
- {minlength}
107
- {maxlength}
108
- {autocomplete}
109
- {showPasswordToggle}
110
- errorText={error}
111
- hintText={hint}
112
- bind:value
113
- oninputchange={oninput}
114
- {onblur}
115
- {onfocus}
116
- />
117
-
118
- {#if showStrength && value}
119
- <PasswordStrengthIndicator
120
- password={value}
121
- bind:score={strengthScore}
122
- bind:strengthText
123
- bind:textColor={strengthColor}
124
- >
125
- <p class="text-xs {strengthColor}">
126
- {labels.passwordStrength} {strengthText}
127
- </p>
128
- </PasswordStrengthIndicator>
129
- {/if}
130
- </div>
1
+ <script lang="ts">
2
+ /**
3
+ * PasswordInput - Password field with show/hide toggle and strength indicator
4
+ *
5
+ * Combines Input (password type) with PasswordStrengthIndicator for
6
+ * a complete password entry experience.
7
+ *
8
+ * @example
9
+ * <PasswordInput
10
+ * label="New Password"
11
+ * bind:value={password}
12
+ * showStrength
13
+ * error={$errors.password}
14
+ * required
15
+ * />
16
+ */
17
+ import Input from '../../primitives/Input/Input.svelte';
18
+ import PasswordStrengthIndicator from './PasswordStrengthIndicator/PasswordStrengthIndicator.svelte';
19
+
20
+ const defaultLabels = {
21
+ passwordStrength: 'Password strength:',
22
+ };
23
+
24
+ interface Props {
25
+ /** Password value */
26
+ value?: string;
27
+ /** Label text */
28
+ label?: string;
29
+ /** Placeholder text */
30
+ placeholder?: string;
31
+ /** Input name attribute */
32
+ name?: string;
33
+ /** Input id attribute */
34
+ id?: string;
35
+ /** Whether the field is required */
36
+ required?: boolean;
37
+ /** Whether the field is disabled */
38
+ disabled?: boolean;
39
+ /** Error message to display */
40
+ error?: string;
41
+ /** Hint text shown below input */
42
+ hint?: string;
43
+ /** Show password strength indicator */
44
+ showStrength?: boolean;
45
+ /** Size variant */
46
+ size?: 'sm' | 'md' | 'lg';
47
+ /** Minimum password length */
48
+ minlength?: number | null;
49
+ /** Maximum password length */
50
+ maxlength?: number | null;
51
+ /** Autocomplete attribute */
52
+ autocomplete?: string;
53
+ /** Whether to show the password toggle button */
54
+ showPasswordToggle?: boolean;
55
+ /** Additional class for the wrapper div */
56
+ class?: string;
57
+ // Optional callbacks (matching Input component signatures)
58
+ oninput?: (value: string) => void;
59
+ onblur?: () => void;
60
+ onfocus?: () => void;
61
+ /** Override user-visible strings */
62
+ labels?: Partial<typeof defaultLabels>;
63
+ }
64
+
65
+ let {
66
+ value = $bindable(''),
67
+ label = '',
68
+ placeholder = '',
69
+ name = '',
70
+ id = '',
71
+ required = false,
72
+ disabled = false,
73
+ error = '',
74
+ hint = '',
75
+ showStrength = false,
76
+ size = 'md',
77
+ minlength = null,
78
+ maxlength = null,
79
+ autocomplete = 'new-password',
80
+ showPasswordToggle = true,
81
+ class: className = '',
82
+ oninput,
83
+ onblur,
84
+ onfocus,
85
+ labels: userLabels = {},
86
+ }: Props = $props();
87
+
88
+ let labels = $derived({ ...defaultLabels, ...userLabels });
89
+
90
+ // Password strength tracking
91
+ let strengthScore = $state(-1);
92
+ let strengthText = $state('');
93
+ let strengthColor = $state('');
94
+ </script>
95
+
96
+ <div class={className}>
97
+ <Input
98
+ type="password"
99
+ {id}
100
+ {name}
101
+ {placeholder}
102
+ {label}
103
+ {required}
104
+ {disabled}
105
+ {size}
106
+ {minlength}
107
+ {maxlength}
108
+ {autocomplete}
109
+ {showPasswordToggle}
110
+ errorText={error}
111
+ hintText={hint}
112
+ bind:value
113
+ oninputchange={oninput}
114
+ {onblur}
115
+ {onfocus}
116
+ />
117
+
118
+ {#if showStrength && value}
119
+ <PasswordStrengthIndicator
120
+ password={value}
121
+ bind:score={strengthScore}
122
+ bind:strengthText
123
+ bind:textColor={strengthColor}
124
+ >
125
+ <p class="text-xs {strengthColor}">
126
+ {labels.passwordStrength} {strengthText}
127
+ </p>
128
+ </PasswordStrengthIndicator>
129
+ {/if}
130
+ </div>
@@ -55,7 +55,7 @@ describe('PasswordStrengthIndicator Component - Strength Calculation', () => {
55
55
  props: { password: 'VeryStrongPass123!' }
56
56
  });
57
57
  expect(container.querySelector('.pt-2.space-y-2')).toBeInTheDocument();
58
- const greenBars = container.querySelectorAll('.bg-green-600');
58
+ const greenBars = container.querySelectorAll('.bg-accent-success');
59
59
  expect(greenBars.length).toBeGreaterThan(0);
60
60
  });
61
61
 
@@ -72,7 +72,7 @@ describe('PasswordStrengthIndicator Component - Visual Indicators', () => {
72
72
  const { container } = render(TestWrapper, {
73
73
  props: { password: 'ab' }
74
74
  });
75
- const filledBars = container.querySelectorAll('.bg-red-600');
75
+ const filledBars = container.querySelectorAll('.bg-accent-danger');
76
76
  expect(filledBars.length).toBeGreaterThanOrEqual(1);
77
77
  });
78
78
 
@@ -98,7 +98,7 @@ describe('PasswordStrengthIndicator Component - Visual Indicators', () => {
98
98
  });
99
99
  const indicator = container.querySelector('.pt-2.space-y-2');
100
100
  expect(indicator).toBeInTheDocument();
101
- const greenBars = container.querySelectorAll('.bg-green-600');
101
+ const greenBars = container.querySelectorAll('.bg-accent-success');
102
102
  expect(greenBars.length).toBe(3);
103
103
  });
104
104
 
@@ -106,7 +106,7 @@ describe('PasswordStrengthIndicator Component - Visual Indicators', () => {
106
106
  const { container } = render(TestWrapper, {
107
107
  props: { password: 'ab' }
108
108
  });
109
- const grayBars = container.querySelectorAll('.bg-gray-200');
109
+ const grayBars = container.querySelectorAll('.bg-bg-tertiary');
110
110
  expect(grayBars.length).toBeGreaterThan(0);
111
111
  });
112
112
 
@@ -132,7 +132,7 @@ describe('PasswordStrengthIndicator Component - Color Coding', () => {
132
132
  const { container } = render(TestWrapper, {
133
133
  props: { password: 'ab' }
134
134
  });
135
- const redBars = container.querySelectorAll('.bg-red-600');
135
+ const redBars = container.querySelectorAll('.bg-accent-danger');
136
136
  expect(redBars.length).toBeGreaterThan(0);
137
137
  });
138
138
 
@@ -141,7 +141,7 @@ describe('PasswordStrengthIndicator Component - Color Coding', () => {
141
141
  props: { password: 'test12' }
142
142
  });
143
143
  expect(container.querySelector('.pt-2.space-y-2')).toBeInTheDocument();
144
- const redBars = container.querySelectorAll('.bg-red-600');
144
+ const redBars = container.querySelectorAll('.bg-accent-danger');
145
145
  expect(redBars.length).toBeGreaterThan(0);
146
146
  });
147
147
 
@@ -150,7 +150,7 @@ describe('PasswordStrengthIndicator Component - Color Coding', () => {
150
150
  props: { password: 'Test1234' }
151
151
  });
152
152
  expect(container.querySelector('.pt-2.space-y-2')).toBeInTheDocument();
153
- const greenBars = container.querySelectorAll('.bg-green-600');
153
+ const greenBars = container.querySelectorAll('.bg-accent-success');
154
154
  expect(greenBars.length).toBeGreaterThan(0);
155
155
  });
156
156
 
@@ -158,7 +158,7 @@ describe('PasswordStrengthIndicator Component - Color Coding', () => {
158
158
  const { container } = render(TestWrapper, {
159
159
  props: { password: 'VeryStrongPass123!' }
160
160
  });
161
- const greenBars = container.querySelectorAll('.bg-green-600');
161
+ const greenBars = container.querySelectorAll('.bg-accent-success');
162
162
  expect(greenBars.length).toBeGreaterThan(0);
163
163
  });
164
164
  });
@@ -179,7 +179,7 @@ describe('PasswordStrengthIndicator Component - Edge Cases', () => {
179
179
  props: { password: longPassword }
180
180
  });
181
181
  expect(container.querySelector('.pt-2.space-y-2')).toBeInTheDocument();
182
- const greenBars = container.querySelectorAll('.bg-green-600');
182
+ const greenBars = container.querySelectorAll('.bg-accent-success');
183
183
  expect(greenBars.length).toBe(3);
184
184
  });
185
185
 
@@ -195,7 +195,7 @@ describe('PasswordStrengthIndicator Component - Edge Cases', () => {
195
195
  props: { password: 'TestPass12345' }
196
196
  });
197
197
  expect(container.querySelector('.pt-2.space-y-2')).toBeInTheDocument();
198
- const greenBars = container.querySelectorAll('.bg-green-600');
198
+ const greenBars = container.querySelectorAll('.bg-accent-success');
199
199
  expect(greenBars.length).toBe(3);
200
200
  });
201
201
 
@@ -214,12 +214,12 @@ describe('PasswordStrengthIndicator Component - Edge Cases', () => {
214
214
  });
215
215
  });
216
216
 
217
- describe('PasswordStrengthIndicator Component - Dark Mode Support', () => {
218
- test('unfilled bars have dark mode class', () => {
217
+ describe('PasswordStrengthIndicator Component - Token-Based Styling', () => {
218
+ test('unfilled bars have token-based background class', () => {
219
219
  const { container } = render(TestWrapper, {
220
220
  props: { password: 'abc' }
221
221
  });
222
- const bars = container.querySelectorAll('.dark\\:bg-gray-700');
222
+ const bars = container.querySelectorAll('.bg-bg-tertiary');
223
223
  expect(bars.length).toBeGreaterThan(0);
224
224
  });
225
225
  });
@@ -232,7 +232,7 @@ describe('PasswordStrengthIndicator Component - Bar Filling', () => {
232
232
  const allBars = container.querySelectorAll('.h-1.flex-1.rounded-full');
233
233
  expect(allBars).toHaveLength(3);
234
234
 
235
- const filledBars = container.querySelectorAll('.bg-red-600, .bg-green-600');
235
+ const filledBars = container.querySelectorAll('.bg-accent-danger, .bg-accent-success');
236
236
  expect(filledBars.length).toBeGreaterThan(0);
237
237
  });
238
238
 
@@ -1,142 +1,142 @@
1
- <script lang="ts">
2
- import type { Snippet } from 'svelte';
3
- import { passwordStrength } from "check-password-strength";
4
- import { safeSlide } from "../../../utils/transitions.js";
5
- import { cubicOut } from "svelte/easing";
6
- import { untrack } from "svelte";
7
-
8
- const defaultLabels = {
9
- tooWeak: 'Too weak',
10
- weak: 'Weak',
11
- good: 'Good',
12
- strong: 'Strong',
13
- };
14
-
15
- interface Props {
16
- password?: string;
17
- strengthText?: string;
18
- score?: number;
19
- textColor?: string;
20
- children?: Snippet;
21
- labels?: Partial<typeof defaultLabels>;
22
- }
23
-
24
- let {
25
- password = "",
26
- strengthText = $bindable(""),
27
- score = $bindable(-1),
28
- textColor = $bindable(""),
29
- children,
30
- labels: userLabels = {},
31
- }: Props = $props();
32
-
33
- let labels = $derived({ ...defaultLabels, ...userLabels });
34
-
35
- let debouncedPassword = $state("");
36
- // Use a plain variable for timer to avoid reactive dependency
37
- let timer: ReturnType<typeof setTimeout> | undefined;
38
-
39
- let customOptions = $derived([
40
- {
41
- id: 0,
42
- value: labels.tooWeak,
43
- minDiversity: 0,
44
- minLength: 0,
45
- },
46
- {
47
- id: 1,
48
- value: labels.weak,
49
- minDiversity: 1,
50
- minLength: 6,
51
- },
52
- {
53
- id: 2,
54
- value: labels.good,
55
- minDiversity: 2,
56
- minLength: 8,
57
- },
58
- {
59
- id: 3,
60
- value: labels.strong,
61
- minDiversity: 3,
62
- minLength: 10,
63
- },
64
- ] as const);
65
-
66
- // Debounce password updates - timer is not reactive to avoid dependency cycle
67
- $effect(() => {
68
- clearTimeout(timer);
69
- if (password.length === 0) {
70
- debouncedPassword = "";
71
- } else {
72
- timer = setTimeout(() => {
73
- debouncedPassword = password;
74
- }, 400); // 400ms delay as requested
75
- }
76
- return () => clearTimeout(timer);
77
- });
78
-
79
- let strength = $derived(debouncedPassword
80
- ? passwordStrength(debouncedPassword, customOptions as any)
81
- : null);
82
-
83
- // Derive score based on password length and strength
84
- let computedScore = $derived(debouncedPassword.length > 12 ? 3 : (strength?.id ?? -1));
85
-
86
- // Sync computed values to bindable props using effects with untrack
87
- $effect(() => {
88
- const newScore = computedScore;
89
- if (untrack(() => score) !== newScore) {
90
- score = newScore;
91
- }
92
- });
93
-
94
- // Derive text and color from computedScore (not from bindable score)
95
- let computedStrengthText = $derived(
96
- computedScore === 0 ? labels.tooWeak :
97
- computedScore === 1 ? labels.weak :
98
- computedScore === 2 ? labels.good :
99
- computedScore === 3 ? labels.strong : ""
100
- );
101
-
102
- let computedTextColor = $derived(computedScore <= 1 ? "text-red-600" : "text-green-600");
103
-
104
- $effect(() => {
105
- const newText = computedStrengthText;
106
- if (untrack(() => strengthText) !== newText) {
107
- strengthText = newText;
108
- }
109
- });
110
-
111
- let strengthColor = $derived(computedScore <= 1 ? "bg-red-600" : "bg-green-600");
112
-
113
- $effect(() => {
114
- const newColor = computedTextColor;
115
- if (untrack(() => textColor) !== newColor) {
116
- textColor = newColor;
117
- }
118
- });
119
-
120
- // Calculate how many bars to fill (1-3)
121
- let filledBars = $derived(computedScore === 0 ? 1 : computedScore === 1 ? 2 : computedScore >= 2 ? 3 : 0);
122
- </script>
123
-
124
- {#if debouncedPassword.length > 0}
125
- <div
126
- transition:safeSlide={{ duration: 600, easing: cubicOut }}
127
- class="pt-2 space-y-2"
128
- >
129
- <!-- 3 segment bars -->
130
- <div class="flex gap-1.5">
131
- {#each [0, 1, 2] as barIndex}
132
- <div
133
- class="h-1 flex-1 rounded-full transition-colors duration-300 {barIndex <
134
- filledBars
135
- ? strengthColor
136
- : 'bg-gray-200 dark:bg-gray-700'}"
137
- ></div>
138
- {/each}
139
- </div>
140
- {@render children?.()}
141
- </div>
142
- {/if}
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+ import { passwordStrength } from "check-password-strength";
4
+ import { safeSlide } from "../../../utils/transitions.js";
5
+ import { cubicOut } from "svelte/easing";
6
+ import { untrack } from "svelte";
7
+
8
+ const defaultLabels = {
9
+ tooWeak: 'Too weak',
10
+ weak: 'Weak',
11
+ good: 'Good',
12
+ strong: 'Strong',
13
+ };
14
+
15
+ interface Props {
16
+ password?: string;
17
+ strengthText?: string;
18
+ score?: number;
19
+ textColor?: string;
20
+ children?: Snippet;
21
+ labels?: Partial<typeof defaultLabels>;
22
+ }
23
+
24
+ let {
25
+ password = "",
26
+ strengthText = $bindable(""),
27
+ score = $bindable(-1),
28
+ textColor = $bindable(""),
29
+ children,
30
+ labels: userLabels = {},
31
+ }: Props = $props();
32
+
33
+ let labels = $derived({ ...defaultLabels, ...userLabels });
34
+
35
+ let debouncedPassword = $state("");
36
+ // Use a plain variable for timer to avoid reactive dependency
37
+ let timer: ReturnType<typeof setTimeout> | undefined;
38
+
39
+ let customOptions = $derived([
40
+ {
41
+ id: 0,
42
+ value: labels.tooWeak,
43
+ minDiversity: 0,
44
+ minLength: 0,
45
+ },
46
+ {
47
+ id: 1,
48
+ value: labels.weak,
49
+ minDiversity: 1,
50
+ minLength: 6,
51
+ },
52
+ {
53
+ id: 2,
54
+ value: labels.good,
55
+ minDiversity: 2,
56
+ minLength: 8,
57
+ },
58
+ {
59
+ id: 3,
60
+ value: labels.strong,
61
+ minDiversity: 3,
62
+ minLength: 10,
63
+ },
64
+ ] as const);
65
+
66
+ // Debounce password updates - timer is not reactive to avoid dependency cycle
67
+ $effect(() => {
68
+ clearTimeout(timer);
69
+ if (password.length === 0) {
70
+ debouncedPassword = "";
71
+ } else {
72
+ timer = setTimeout(() => {
73
+ debouncedPassword = password;
74
+ }, 400); // 400ms delay as requested
75
+ }
76
+ return () => clearTimeout(timer);
77
+ });
78
+
79
+ let strength = $derived(debouncedPassword
80
+ ? passwordStrength(debouncedPassword, customOptions as any)
81
+ : null);
82
+
83
+ // Derive score based on password length and strength
84
+ let computedScore = $derived(debouncedPassword.length > 12 ? 3 : (strength?.id ?? -1));
85
+
86
+ // Sync computed values to bindable props using effects with untrack
87
+ $effect(() => {
88
+ const newScore = computedScore;
89
+ if (untrack(() => score) !== newScore) {
90
+ score = newScore;
91
+ }
92
+ });
93
+
94
+ // Derive text and color from computedScore (not from bindable score)
95
+ let computedStrengthText = $derived(
96
+ computedScore === 0 ? labels.tooWeak :
97
+ computedScore === 1 ? labels.weak :
98
+ computedScore === 2 ? labels.good :
99
+ computedScore === 3 ? labels.strong : ""
100
+ );
101
+
102
+ let computedTextColor = $derived(computedScore <= 1 ? "text-accent-danger" : "text-accent-success");
103
+
104
+ $effect(() => {
105
+ const newText = computedStrengthText;
106
+ if (untrack(() => strengthText) !== newText) {
107
+ strengthText = newText;
108
+ }
109
+ });
110
+
111
+ let strengthColor = $derived(computedScore <= 1 ? "bg-accent-danger" : "bg-accent-success");
112
+
113
+ $effect(() => {
114
+ const newColor = computedTextColor;
115
+ if (untrack(() => textColor) !== newColor) {
116
+ textColor = newColor;
117
+ }
118
+ });
119
+
120
+ // Calculate how many bars to fill (1-3)
121
+ let filledBars = $derived(computedScore === 0 ? 1 : computedScore === 1 ? 2 : computedScore >= 2 ? 3 : 0);
122
+ </script>
123
+
124
+ {#if debouncedPassword.length > 0}
125
+ <div
126
+ transition:safeSlide={{ duration: 600, easing: cubicOut }}
127
+ class="pt-2 space-y-2"
128
+ >
129
+ <!-- 3 segment bars -->
130
+ <div class="flex gap-1.5">
131
+ {#each [0, 1, 2] as barIndex}
132
+ <div
133
+ class="h-1 flex-1 rounded-full transition-colors duration-300 {barIndex <
134
+ filledBars
135
+ ? strengthColor
136
+ : 'bg-bg-tertiary'}"
137
+ ></div>
138
+ {/each}
139
+ </div>
140
+ {@render children?.()}
141
+ </div>
142
+ {/if}
@@ -47,7 +47,7 @@
47
47
  // Compute score based on password length and strength
48
48
  let score = $derived(password.length > 12 ? 3 : (strength?.id ?? -1));
49
49
 
50
- let strengthColor = $derived(score <= 1 ? "bg-red-600" : "bg-green-600");
50
+ let strengthColor = $derived(score <= 1 ? "bg-accent-danger" : "bg-accent-success");
51
51
 
52
52
  // Calculate how many bars to fill (1-3)
53
53
  let filledBars = $derived(score === 0 ? 1 : score === 1 ? 2 : score >= 2 ? 3 : 0);
@@ -62,7 +62,7 @@
62
62
  class="h-1 flex-1 rounded-full transition-colors duration-300 {barIndex <
63
63
  filledBars
64
64
  ? strengthColor
65
- : 'bg-gray-200 dark:bg-gray-700'}"
65
+ : 'bg-bg-tertiary'}"
66
66
  ></div>
67
67
  {/each}
68
68
  </div>