@finsweet/webflow-apps-utils 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (293) hide show
  1. package/README.md +162 -1
  2. package/dist/index.d.ts +2 -1
  3. package/dist/index.js +2 -1
  4. package/dist/providers/GlobalProvider.mdx +322 -0
  5. package/dist/providers/GlobalProvider.svelte +58 -0
  6. package/dist/providers/GlobalProvider.svelte.d.ts +4 -0
  7. package/dist/providers/configuratorUtils.d.ts +37 -0
  8. package/dist/providers/configuratorUtils.js +219 -0
  9. package/dist/providers/globalContext.svelte.d.ts +18 -0
  10. package/dist/providers/globalContext.svelte.js +439 -0
  11. package/dist/providers/index.d.ts +5 -0
  12. package/dist/providers/index.js +7 -0
  13. package/dist/providers/types.d.ts +103 -0
  14. package/dist/providers/types.js +6 -0
  15. package/dist/router/Router.mdx +958 -0
  16. package/dist/router/Router.stories.d.ts +6 -0
  17. package/dist/router/Router.stories.js +47 -0
  18. package/dist/router/examples/RouterExample.svelte +271 -0
  19. package/dist/{ui/components/NoSettingsNeeded.svelte.d.ts → router/examples/RouterExample.svelte.d.ts} +3 -3
  20. package/dist/router/examples/index.d.ts +4 -0
  21. package/dist/router/examples/index.js +4 -0
  22. package/dist/router/examples/pages/AboutPage.svelte +568 -0
  23. package/dist/router/examples/pages/AboutPage.svelte.d.ts +13 -0
  24. package/dist/router/examples/pages/HomePage.svelte +200 -0
  25. package/dist/router/examples/pages/HomePage.svelte.d.ts +14 -0
  26. package/dist/router/examples/pages/NotFoundPage.svelte +307 -0
  27. package/dist/router/examples/pages/NotFoundPage.svelte.d.ts +17 -0
  28. package/dist/router/hooks.svelte.d.ts +2 -2
  29. package/dist/router/index.d.ts +3 -0
  30. package/dist/router/index.js +3 -0
  31. package/dist/router/{Link.svelte → providers/Link.svelte} +1 -1
  32. package/dist/router/{Route.svelte → providers/Route.svelte} +1 -1
  33. package/dist/router/{Route.svelte.d.ts → providers/Route.svelte.d.ts} +1 -1
  34. package/dist/router/{Router.svelte → providers/RouterProvider.svelte} +22 -5
  35. package/dist/router/{Router.svelte.d.ts → providers/RouterProvider.svelte.d.ts} +8 -4
  36. package/dist/router/providers/index.d.ts +3 -0
  37. package/dist/router/providers/index.js +3 -0
  38. package/dist/router/{index.svelte.d.ts → router.svelte.d.ts} +1 -3
  39. package/dist/router/{index.svelte.js → router.svelte.js} +1 -4
  40. package/dist/stores/docs/Form.mdx +542 -0
  41. package/dist/stores/forms.d.ts +41 -4
  42. package/dist/stores/forms.js +86 -32
  43. package/dist/stores/index.d.ts +0 -1
  44. package/dist/stores/index.js +0 -1
  45. package/dist/types/customCode.d.ts +1 -1
  46. package/dist/types/webflow.d.ts +31 -47
  47. package/dist/types/window.d.ts +1 -0
  48. package/dist/ui/components/LoadingScreen.svelte +2 -1
  49. package/dist/ui/components/button/Button.svelte +1 -1
  50. package/dist/ui/components/button-group/ButtonGroup.stories.js +112 -0
  51. package/dist/ui/components/{ButtonGroup.svelte → button-group/ButtonGroup.svelte} +20 -33
  52. package/dist/ui/components/button-group/ButtonGroup.svelte.d.ts +13 -0
  53. package/dist/ui/components/button-group/index.d.ts +2 -0
  54. package/dist/ui/components/button-group/index.js +1 -0
  55. package/dist/ui/components/button-group/types.d.ts +32 -0
  56. package/dist/ui/components/checkbox/Checkbox.stories.d.ts +55 -0
  57. package/dist/ui/components/checkbox/Checkbox.stories.js +162 -0
  58. package/dist/ui/components/checkbox/Checkbox.svelte +141 -0
  59. package/dist/ui/components/checkbox/Checkbox.svelte.d.ts +4 -0
  60. package/dist/ui/components/checkbox/index.d.ts +2 -0
  61. package/dist/ui/components/checkbox/index.js +1 -0
  62. package/dist/ui/components/checkbox/types.d.ts +32 -0
  63. package/dist/ui/components/controlled-buttons/ControlledButtons.stories.d.ts +32 -0
  64. package/dist/ui/components/controlled-buttons/ControlledButtons.stories.js +152 -0
  65. package/dist/ui/components/{buttons/FooterButton.svelte → controlled-buttons/ControlledButtons.svelte} +18 -67
  66. package/dist/ui/components/controlled-buttons/ControlledButtons.svelte.d.ts +4 -0
  67. package/dist/ui/components/controlled-buttons/index.d.ts +2 -0
  68. package/dist/ui/components/controlled-buttons/index.js +1 -0
  69. package/dist/ui/components/{buttons → controlled-buttons}/types.d.ts +11 -4
  70. package/dist/ui/components/copy-text/CopyText.stories.d.ts +70 -0
  71. package/dist/ui/components/copy-text/CopyText.stories.js +241 -0
  72. package/dist/ui/components/copy-text/CopyText.svelte +249 -0
  73. package/dist/ui/components/copy-text/CopyText.svelte.d.ts +4 -0
  74. package/dist/ui/components/copy-text/index.d.ts +2 -0
  75. package/dist/ui/components/copy-text/index.js +1 -0
  76. package/dist/ui/components/copy-text/types.d.ts +52 -0
  77. package/dist/ui/components/copy-text/types.js +1 -0
  78. package/dist/ui/components/divider/Divider.stories.svelte +134 -0
  79. package/dist/ui/components/{clickable/Clickable.stories.svelte.d.ts → divider/Divider.stories.svelte.d.ts} +4 -4
  80. package/dist/ui/components/divider/Divider.svelte +30 -0
  81. package/dist/ui/components/divider/Divider.svelte.d.ts +4 -0
  82. package/dist/ui/components/divider/index.d.ts +2 -0
  83. package/dist/ui/components/divider/index.js +1 -0
  84. package/dist/ui/components/divider/types.d.ts +23 -0
  85. package/dist/ui/components/divider/types.js +1 -0
  86. package/dist/ui/components/iframe/Iframe.stories.svelte +122 -0
  87. package/dist/ui/components/{ToggleItem.svelte.d.ts → iframe/Iframe.stories.svelte.d.ts} +7 -8
  88. package/dist/ui/components/iframe/Iframe.svelte +75 -0
  89. package/dist/ui/components/iframe/Iframe.svelte.d.ts +4 -0
  90. package/dist/ui/components/iframe/index.d.ts +2 -0
  91. package/dist/ui/components/iframe/index.js +1 -0
  92. package/dist/ui/components/iframe/types.d.ts +38 -0
  93. package/dist/ui/components/iframe/types.js +1 -0
  94. package/dist/ui/components/index.d.ts +13 -39
  95. package/dist/ui/components/index.js +13 -39
  96. package/dist/ui/components/input/Input.stories.d.ts +33 -0
  97. package/dist/ui/components/input/Input.stories.js +176 -0
  98. package/dist/ui/components/input/Input.svelte +358 -81
  99. package/dist/ui/components/input/types.d.ts +33 -1
  100. package/dist/ui/components/layout/Layout.stories.svelte +3 -3
  101. package/dist/ui/components/layout/Layout.svelte +10 -64
  102. package/dist/ui/components/layout/Layout.svelte.d.ts +2 -2
  103. package/dist/ui/components/layout/common/EditModeMessage.svelte +24 -12
  104. package/dist/ui/components/layout/{ExampleLayout.svelte → examples/ExampleLayout.svelte} +56 -39
  105. package/dist/ui/components/layout/examples/Wrapper.svelte +9 -0
  106. package/dist/ui/components/{Header.svelte.d.ts → layout/examples/Wrapper.svelte.d.ts} +4 -6
  107. package/dist/ui/components/layout/examples/index.d.ts +2 -0
  108. package/dist/ui/components/layout/examples/index.js +2 -0
  109. package/dist/ui/components/layout/index.d.ts +3 -2
  110. package/dist/ui/components/layout/index.js +2 -1
  111. package/dist/ui/components/layout/test-helpers/TestLayoutWithFooter.svelte +20 -0
  112. package/dist/ui/components/layout/test-helpers/TestLayoutWithFooter.svelte.d.ts +7 -0
  113. package/dist/ui/components/layout/types.d.ts +1 -10
  114. package/dist/ui/components/modal/Example.svelte +320 -0
  115. package/dist/ui/components/modal/Example.svelte.d.ts +3 -0
  116. package/dist/ui/components/modal/Modal.stories.svelte +18 -0
  117. package/dist/ui/components/modal/Modal.stories.svelte.d.ts +26 -0
  118. package/dist/ui/components/modal/Modal.svelte +490 -0
  119. package/dist/ui/components/modal/Modal.svelte.d.ts +130 -0
  120. package/dist/ui/components/modal/index.d.ts +2 -0
  121. package/dist/ui/components/modal/index.js +1 -0
  122. package/dist/ui/components/modal/types.d.ts +75 -0
  123. package/dist/ui/components/modal/types.js +1 -0
  124. package/dist/ui/components/notification/Notification.stories.svelte +239 -0
  125. package/dist/ui/components/{ToggleList.svelte.d.ts → notification/Notification.stories.svelte.d.ts} +9 -21
  126. package/dist/ui/components/notification/Notification.svelte +294 -0
  127. package/dist/ui/components/notification/Notification.svelte.d.ts +67 -0
  128. package/dist/ui/components/notification/index.d.ts +2 -0
  129. package/dist/ui/components/notification/index.js +1 -0
  130. package/dist/ui/components/notification/types.d.ts +68 -0
  131. package/dist/ui/components/notification/types.js +1 -0
  132. package/dist/ui/components/section/Section.stories.svelte +263 -0
  133. package/dist/ui/components/section/Section.stories.svelte.d.ts +27 -0
  134. package/dist/ui/components/section/Section.svelte +326 -0
  135. package/dist/ui/components/section/Section.svelte.d.ts +5 -0
  136. package/dist/ui/components/section/index.d.ts +2 -0
  137. package/dist/ui/components/section/index.js +1 -0
  138. package/dist/ui/components/section/types.d.ts +114 -0
  139. package/dist/ui/components/section/types.js +1 -0
  140. package/dist/ui/components/{ImageUpload.svelte → shared/ImageUpload.svelte} +3 -3
  141. package/dist/ui/components/{SelectBodyOrDivBlock.svelte → shared/SelectBodyOrDivBlock.svelte} +1 -1
  142. package/dist/ui/components/shared/index.d.ts +2 -0
  143. package/dist/ui/components/shared/index.js +2 -0
  144. package/dist/ui/components/text/Text.stories.svelte +67 -1
  145. package/dist/ui/components/text/Text.svelte +209 -8
  146. package/dist/ui/components/text/types.d.ts +4 -0
  147. package/dist/ui/index.css +33 -5
  148. package/dist/utils/animations/factory.d.ts +7 -0
  149. package/dist/utils/animations/factory.js +101 -0
  150. package/dist/utils/animations/index.d.ts +7 -0
  151. package/dist/utils/animations/index.js +62 -0
  152. package/dist/utils/animations/types.d.ts +39 -0
  153. package/dist/utils/animations/types.js +1 -0
  154. package/dist/utils/api/checkIfAppModeIsDesign.d.ts +1 -2
  155. package/dist/utils/api/checkIfAppModeIsDesign.js +1 -2
  156. package/dist/utils/api/clipboard/handlePaste.d.ts +6 -37
  157. package/dist/utils/api/clipboard/handlePaste.js +2 -6
  158. package/dist/utils/api/getAllAssets.d.ts +1 -2
  159. package/dist/utils/api/getAllAssets.js +1 -2
  160. package/dist/utils/api/getFinsweetComponentsEnvironment.d.ts +1 -2
  161. package/dist/utils/api/getFinsweetComponentsEnvironment.js +3 -6
  162. package/dist/utils/api/index.d.ts +0 -1
  163. package/dist/utils/api/index.js +0 -1
  164. package/dist/utils/api/insertWithXSCP.d.ts +1 -2
  165. package/dist/utils/api/insertWithXSCP.js +1 -2
  166. package/dist/utils/auth/crossWindowLogin.d.ts +3 -0
  167. package/dist/utils/auth/crossWindowLogin.js +3 -0
  168. package/dist/utils/auth/index.d.ts +9 -25
  169. package/dist/utils/auth/index.js +9 -25
  170. package/dist/utils/browser-storage/localStorage.d.ts +4 -12
  171. package/dist/utils/browser-storage/localStorage.js +4 -12
  172. package/dist/utils/browser-storage/sessionStorage.d.ts +4 -12
  173. package/dist/utils/browser-storage/sessionStorage.js +4 -12
  174. package/dist/utils/custom-code/api.d.ts +3 -7
  175. package/dist/utils/custom-code/api.js +3 -7
  176. package/dist/utils/custom-code/configs.d.ts +22 -0
  177. package/dist/utils/custom-code/configs.js +40 -0
  178. package/dist/utils/custom-code/index.d.ts +1 -0
  179. package/dist/utils/custom-code/index.js +1 -0
  180. package/dist/utils/helpers/capitalizeFirstLetter.d.ts +4 -0
  181. package/dist/utils/helpers/capitalizeFirstLetter.js +9 -0
  182. package/dist/utils/helpers/cleanupTooltipMessage.d.ts +1 -2
  183. package/dist/utils/helpers/cleanupTooltipMessage.js +1 -2
  184. package/dist/utils/helpers/getTimeNow.d.ts +4 -0
  185. package/dist/utils/helpers/getTimeNow.js +8 -0
  186. package/dist/utils/helpers/goto.d.ts +1 -4
  187. package/dist/utils/helpers/goto.js +2 -7
  188. package/dist/utils/helpers/index.d.ts +5 -0
  189. package/dist/utils/helpers/index.js +5 -0
  190. package/dist/utils/helpers/minifyCode.d.ts +10 -0
  191. package/dist/utils/helpers/minifyCode.js +73 -0
  192. package/dist/utils/helpers/noop.d.ts +1 -1
  193. package/dist/utils/helpers/noop.js +1 -1
  194. package/dist/utils/helpers/numbers.d.ts +4 -14
  195. package/dist/utils/helpers/numbers.js +4 -14
  196. package/dist/utils/helpers/objectsToModuleExports.d.ts +2 -4
  197. package/dist/utils/helpers/objectsToModuleExports.js +2 -3
  198. package/dist/utils/helpers/toHumanReadableList.d.ts +4 -0
  199. package/dist/utils/helpers/toHumanReadableList.js +11 -0
  200. package/dist/utils/helpers/trimText.d.ts +1 -8
  201. package/dist/utils/helpers/trimText.js +1 -8
  202. package/dist/utils/index.d.ts +5 -0
  203. package/dist/utils/index.js +5 -0
  204. package/dist/utils/logger/index.d.ts +0 -2
  205. package/dist/utils/logger/index.js +0 -2
  206. package/dist/utils/webflow-canvas/attributes/getAllWebflowElementAttributes.d.ts +1 -3
  207. package/dist/utils/webflow-canvas/attributes/getAllWebflowElementAttributes.js +1 -3
  208. package/dist/utils/webflow-canvas/attributes/getInstanceNamesFromObject.d.ts +1 -5
  209. package/dist/utils/webflow-canvas/attributes/getInstanceNamesFromObject.js +1 -5
  210. package/dist/utils/webflow-canvas/attributes/getWebflowElementAttribute.d.ts +1 -4
  211. package/dist/utils/webflow-canvas/attributes/getWebflowElementAttribute.js +1 -4
  212. package/dist/utils/webflow-canvas/attributes/getWebflowElementTextContent.d.ts +1 -3
  213. package/dist/utils/webflow-canvas/attributes/getWebflowElementTextContent.js +1 -3
  214. package/dist/utils/webflow-canvas/attributes/removeWebflowElementAttribute.d.ts +1 -4
  215. package/dist/utils/webflow-canvas/attributes/removeWebflowElementAttribute.js +1 -4
  216. package/dist/utils/webflow-canvas/attributes/setStyles.d.ts +1 -3
  217. package/dist/utils/webflow-canvas/attributes/setStyles.js +1 -3
  218. package/dist/utils/webflow-canvas/attributes/setWebflowElementAttribute.d.ts +1 -8
  219. package/dist/utils/webflow-canvas/attributes/setWebflowElementAttribute.js +1 -13
  220. package/dist/utils/webflow-canvas/findInstanceElement.d.ts +0 -6
  221. package/dist/utils/webflow-canvas/findInstanceElement.js +1 -7
  222. package/dist/utils/webflow-canvas/getAllChildren.d.ts +16 -0
  223. package/dist/utils/webflow-canvas/getAllChildren.js +65 -0
  224. package/dist/utils/webflow-canvas/getAllPages.d.ts +3 -10
  225. package/dist/utils/webflow-canvas/getAllPages.js +3 -10
  226. package/dist/utils/webflow-canvas/getElementClassList.d.ts +9 -0
  227. package/dist/utils/webflow-canvas/getElementClassList.js +19 -0
  228. package/dist/utils/webflow-canvas/getSiteStagingUrl.d.ts +1 -4
  229. package/dist/utils/webflow-canvas/getSiteStagingUrl.js +1 -4
  230. package/dist/utils/webflow-canvas/index.d.ts +3 -0
  231. package/dist/utils/webflow-canvas/index.js +3 -0
  232. package/package.json +14 -2
  233. package/dist/router/README.md +0 -397
  234. package/dist/stores/globalStore.d.ts +0 -10
  235. package/dist/stores/globalStore.js +0 -10
  236. package/dist/ui/components/ButtonGroup.svelte.d.ts +0 -28
  237. package/dist/ui/components/Checkbox.svelte +0 -94
  238. package/dist/ui/components/Checkbox.svelte.d.ts +0 -36
  239. package/dist/ui/components/Copy.svelte +0 -329
  240. package/dist/ui/components/Copy.svelte.d.ts +0 -35
  241. package/dist/ui/components/CustomModal.svelte +0 -192
  242. package/dist/ui/components/CustomModal.svelte.d.ts +0 -45
  243. package/dist/ui/components/DisableInEditMode.svelte +0 -66
  244. package/dist/ui/components/DisableInEditMode.svelte.d.ts +0 -33
  245. package/dist/ui/components/Divider.svelte +0 -31
  246. package/dist/ui/components/Divider.svelte.d.ts +0 -31
  247. package/dist/ui/components/Header.svelte +0 -30
  248. package/dist/ui/components/Iframe.svelte +0 -89
  249. package/dist/ui/components/Iframe.svelte.d.ts +0 -40
  250. package/dist/ui/components/InjectComponent.svelte +0 -297
  251. package/dist/ui/components/InjectComponent.svelte.d.ts +0 -27
  252. package/dist/ui/components/Modal.svelte +0 -139
  253. package/dist/ui/components/Modal.svelte.d.ts +0 -42
  254. package/dist/ui/components/Navbar.svelte +0 -132
  255. package/dist/ui/components/Navbar.svelte.d.ts +0 -29
  256. package/dist/ui/components/NoSettingsNeeded.svelte +0 -31
  257. package/dist/ui/components/Notification.svelte +0 -193
  258. package/dist/ui/components/Notification.svelte.d.ts +0 -64
  259. package/dist/ui/components/PlusMinusButton.svelte +0 -91
  260. package/dist/ui/components/PlusMinusButton.svelte.d.ts +0 -22
  261. package/dist/ui/components/PreviewBar.svelte +0 -40
  262. package/dist/ui/components/PreviewBar.svelte.d.ts +0 -20
  263. package/dist/ui/components/ScrollableContent.svelte +0 -18
  264. package/dist/ui/components/ScrollableContent.svelte.d.ts +0 -31
  265. package/dist/ui/components/Section.svelte +0 -97
  266. package/dist/ui/components/Section.svelte.d.ts +0 -50
  267. package/dist/ui/components/Spacer.svelte +0 -9
  268. package/dist/ui/components/Spacer.svelte.d.ts +0 -22
  269. package/dist/ui/components/SpinnerPlusMinus.svelte +0 -75
  270. package/dist/ui/components/SpinnerPlusMinus.svelte.d.ts +0 -23
  271. package/dist/ui/components/SpinnerUpDown.svelte +0 -194
  272. package/dist/ui/components/SpinnerUpDown.svelte.d.ts +0 -31
  273. package/dist/ui/components/Tabs.svelte +0 -71
  274. package/dist/ui/components/Tabs.svelte.d.ts +0 -26
  275. package/dist/ui/components/ToggleItem.svelte +0 -29
  276. package/dist/ui/components/ToggleList.svelte +0 -57
  277. package/dist/ui/components/buttons/FooterButton.svelte.d.ts +0 -10
  278. package/dist/ui/components/buttons/index.d.ts +0 -5
  279. package/dist/ui/components/buttons/index.js +0 -5
  280. package/dist/ui/components/clickable/Clickable.stories.svelte +0 -213
  281. package/dist/ui/components/clickable/Clickable.svelte +0 -93
  282. package/dist/ui/components/clickable/Clickable.svelte.d.ts +0 -4
  283. package/dist/ui/components/clickable/index.d.ts +0 -2
  284. package/dist/ui/components/clickable/index.js +0 -1
  285. package/dist/ui/components/clickable/types.d.ts +0 -17
  286. package/dist/utils/api/copyPaste/index.d.ts +0 -18
  287. /package/dist/router/{Link.svelte.d.ts → providers/Link.svelte.d.ts} +0 -0
  288. /package/dist/ui/components/{buttons → button-group}/types.js +0 -0
  289. /package/dist/ui/components/{clickable → checkbox}/types.js +0 -0
  290. /package/dist/{utils/api/copyPaste/index.js → ui/components/controlled-buttons/types.js} +0 -0
  291. /package/dist/ui/components/layout/{ExampleLayout.svelte.d.ts → examples/ExampleLayout.svelte.d.ts} +0 -0
  292. /package/dist/ui/components/{ImageUpload.svelte.d.ts → shared/ImageUpload.svelte.d.ts} +0 -0
  293. /package/dist/ui/components/{SelectBodyOrDivBlock.svelte.d.ts → shared/SelectBodyOrDivBlock.svelte.d.ts} +0 -0
@@ -0,0 +1,320 @@
1
+ <script lang="ts">
2
+ import { InfoIcon, SaveIcon, WarningTriangleIcon } from '../../icons';
3
+ import { Button } from '../button';
4
+ import Modal from './Modal.svelte';
5
+
6
+ // Modal states
7
+ let basicModalOpen = $state(false);
8
+ let loadingModalOpen = $state(false);
9
+ let noHeaderModalOpen = $state(false);
10
+ let preventCloseModalOpen = $state(false);
11
+ let customStyledModalOpen = $state(false);
12
+ let longContentModalOpen = $state(false);
13
+ let customFooterModalOpen = $state(false);
14
+
15
+ // Loading simulation
16
+ let isLoading = $state(false);
17
+
18
+ // Handle loading modal
19
+ async function handleShowLoading() {
20
+ loadingModalOpen = true;
21
+ isLoading = true;
22
+
23
+ // Simulate async operation
24
+ setTimeout(() => {
25
+ isLoading = false;
26
+ }, 3000);
27
+ }
28
+
29
+ // Handle prevent close modal
30
+ function handleForceClose() {
31
+ preventCloseModalOpen = false;
32
+ }
33
+ </script>
34
+
35
+ <div class="modal-examples">
36
+ <h2>Modal Component Examples</h2>
37
+ <p>Interactive examples demonstrating different modal configurations and behaviors.</p>
38
+
39
+ <div class="example-section">
40
+ <h3>Basic Examples</h3>
41
+ <div class="button-grid">
42
+ <Button variant="primary" onclick={() => (basicModalOpen = true)}>Basic Modal</Button>
43
+ <Button variant="primary" onclick={handleShowLoading}>Loading Modal</Button>
44
+ <Button variant="primary" onclick={() => (noHeaderModalOpen = true)}
45
+ >No Header/Footer Modal</Button
46
+ >
47
+ <Button variant="primary" onclick={() => (preventCloseModalOpen = true)}>
48
+ Prevent Close Modal
49
+ </Button>
50
+ <Button variant="primary" onclick={() => (customStyledModalOpen = true)}>
51
+ Custom Styled Modal
52
+ </Button>
53
+ <Button variant="primary" onclick={() => (longContentModalOpen = true)}>
54
+ Long Content Modal
55
+ </Button>
56
+ <Button variant="primary" onclick={() => (customFooterModalOpen = true)}>
57
+ Custom Footer Modal
58
+ </Button>
59
+ </div>
60
+ </div>
61
+
62
+ <!-- Basic Modal -->
63
+ <Modal
64
+ open={basicModalOpen}
65
+ width="400px"
66
+ height="300px"
67
+ padding="8px 12px"
68
+ title="Basic Modal"
69
+ actionText="Confirm"
70
+ cancelText="Cancel"
71
+ onOpenChange={(open) => (basicModalOpen = open)}
72
+ onAction={() => {
73
+ console.log('Action clicked');
74
+ basicModalOpen = false;
75
+ }}
76
+ onCancel={() => {
77
+ console.log('Cancel clicked');
78
+ basicModalOpen = false;
79
+ }}
80
+ >
81
+ <div>
82
+ <p>
83
+ This is a basic modal with default header and footer. The header shows the title and close
84
+ button, while the footer shows action and cancel buttons.
85
+ </p>
86
+ <p>The footer is properly positioned at the bottom using flexbox layout.</p>
87
+ <p>Even with multiple paragraphs of content, the footer stays at the bottom of the modal.</p>
88
+ <p>This ensures a consistent and predictable layout regardless of content length.</p>
89
+ </div>
90
+ </Modal>
91
+
92
+ <!-- Loading Modal -->
93
+ <Modal
94
+ open={loadingModalOpen}
95
+ width="400px"
96
+ height="300px"
97
+ headerPadding="12px 16px"
98
+ contentPadding="16px"
99
+ loading={isLoading}
100
+ loadingMessage="Processing your request..."
101
+ onOpenChange={(open) => (loadingModalOpen = open)}
102
+ >
103
+ {#snippet header()}
104
+ <div style="display: flex; align-items: center; gap: 8px;">
105
+ <SaveIcon />
106
+ <h3>Processing</h3>
107
+ </div>
108
+ {/snippet}
109
+
110
+ <p>
111
+ This modal demonstrates the loading state. The loading overlay will disappear after 3 seconds.
112
+ </p>
113
+ </Modal>
114
+
115
+ <!-- No Header Modal -->
116
+ <Modal
117
+ open={noHeaderModalOpen}
118
+ width="400px"
119
+ height="300px"
120
+ contentPadding="32px"
121
+ showHeader={false}
122
+ showFooter={false}
123
+ onOpenChange={(open) => (noHeaderModalOpen = open)}
124
+ >
125
+ <div style="text-align: center;">
126
+ <div style="margin-bottom: 12px; display: flex; justify-content: center;">
127
+ <InfoIcon />
128
+ </div>
129
+ <h3 style="margin-bottom: 8px;">Welcome!</h3>
130
+ <p>This modal has no header or footer. Close it by clicking outside or pressing Escape.</p>
131
+ </div>
132
+ </Modal>
133
+
134
+ <!-- Prevent Close Modal -->
135
+ <Modal
136
+ open={preventCloseModalOpen}
137
+ width="400px"
138
+ height="300px"
139
+ headerPadding="12px"
140
+ contentPadding="12px"
141
+ footerPadding="12px"
142
+ closeOnOverlayClick={false}
143
+ closeOnEscape={false}
144
+ showCloseButton={false}
145
+ title="⚠️ Important Notice"
146
+ actionText="I Understand"
147
+ cancelText="Dismiss"
148
+ onOpenChange={(open) => (preventCloseModalOpen = open)}
149
+ onAction={handleForceClose}
150
+ onCancel={() => (preventCloseModalOpen = false)}
151
+ >
152
+ {#snippet header()}
153
+ <div style="display: flex; align-items: center; gap: 8px;">
154
+ <WarningTriangleIcon />
155
+ <h3>⚠️ Important Notice</h3>
156
+ </div>
157
+ {/snippet}
158
+
159
+ <p>
160
+ This modal cannot be closed by clicking outside or pressing Escape. You must use the footer
161
+ buttons below to close it.
162
+ </p>
163
+ </Modal>
164
+
165
+ <!-- Custom Styled Modal -->
166
+ <Modal
167
+ open={customStyledModalOpen}
168
+ width="400px"
169
+ height="300px"
170
+ headerPadding="24px"
171
+ contentPadding="24px"
172
+ overlayColor="rgba(255, 0, 100, 0.3)"
173
+ style="border: 3px solid #ff6b6b; box-shadow: 0 0 30px rgba(255, 107, 107, 0.5);"
174
+ onOpenChange={(open) => (customStyledModalOpen = open)}
175
+ >
176
+ {#snippet header()}
177
+ <h3 style="color: #ff6b6b;">🎨 Custom Styled Modal</h3>
178
+ {/snippet}
179
+
180
+ <div>
181
+ <p>This modal demonstrates custom styling with:</p>
182
+ <ul style="margin: 16px 0; padding-left: 20px;">
183
+ <li>Individual section padding</li>
184
+ <li>Pink overlay background</li>
185
+ <li>Custom border and shadow</li>
186
+ <li>Colorful header text</li>
187
+ </ul>
188
+ </div>
189
+ </Modal>
190
+
191
+ <!-- Long Content Modal -->
192
+ <Modal
193
+ open={longContentModalOpen}
194
+ width="400px"
195
+ height="300px"
196
+ title="Layout Demo"
197
+ actionText="Confirm"
198
+ cancelText="Cancel"
199
+ onOpenChange={(open) => (longContentModalOpen = open)}
200
+ onAction={() => (longContentModalOpen = false)}
201
+ onCancel={() => (longContentModalOpen = false)}
202
+ >
203
+ <div>
204
+ <h4>Flexbox Layout Demonstration</h4>
205
+ <p>This modal demonstrates how the flexbox layout keeps the footer at the bottom.</p>
206
+ <p>
207
+ Even when the content is long and exceeds the modal height, the footer remains positioned
208
+ correctly at the bottom.
209
+ </p>
210
+ <p>The content area becomes scrollable while the header and footer stay in place.</p>
211
+ <p>This provides a consistent user experience regardless of content length.</p>
212
+ <p>Here's some additional content to show the scrolling behavior:</p>
213
+ <ul>
214
+ <li>Item 1: Flexbox provides excellent layout control</li>
215
+ <li>Item 2: The footer stays anchored at the bottom</li>
216
+ <li>Item 3: Content area scrolls independently</li>
217
+ <li>Item 4: Header remains fixed at the top</li>
218
+ <li>Item 5: This creates a professional modal layout</li>
219
+ </ul>
220
+ <p>You can scroll through this content while the footer remains visible and accessible.</p>
221
+ <p>This is especially important for forms or detailed content that needs action buttons.</p>
222
+ </div>
223
+ </Modal>
224
+
225
+ <!-- Custom Footer Modal -->
226
+ <Modal
227
+ open={customFooterModalOpen}
228
+ width="400px"
229
+ height="300px"
230
+ title="Custom Footer Example"
231
+ actionText="Save Changes"
232
+ cancelText="Cancel"
233
+ onOpenChange={(open) => (customFooterModalOpen = open)}
234
+ onAction={() => {
235
+ console.log('Save action triggered');
236
+ customFooterModalOpen = false;
237
+ }}
238
+ onCancel={() => {
239
+ console.log('Cancel action triggered');
240
+ customFooterModalOpen = false;
241
+ }}
242
+ >
243
+ <div>
244
+ <p>This modal demonstrates custom footer styling while maintaining proper functionality.</p>
245
+ <p>
246
+ Both the "Save Changes" and "Cancel" buttons will close the modal and trigger their
247
+ respective callbacks.
248
+ </p>
249
+ </div>
250
+
251
+ {#snippet footer()}
252
+ <div style="display: flex; justify-content: space-between; width: 100%;">
253
+ <div style="display: flex; gap: 8px; width: 100%; justify-content: space-between;">
254
+ <Button
255
+ variant="secondary"
256
+ onclick={() => {
257
+ console.log('Custom cancel clicked');
258
+ customFooterModalOpen = false;
259
+ }}
260
+ >
261
+ ✕ Cancel
262
+ </Button>
263
+ <Button
264
+ variant="primary"
265
+ onclick={() => {
266
+ console.log('Custom save clicked');
267
+ customFooterModalOpen = false;
268
+ }}
269
+ >
270
+ ✓ Save & Close
271
+ </Button>
272
+ </div>
273
+ </div>
274
+ {/snippet}
275
+ </Modal>
276
+ </div>
277
+
278
+ <style>
279
+ .modal-examples {
280
+ padding: 24px;
281
+ width: 800px;
282
+ height: 600px;
283
+ margin: 0 auto;
284
+ position: relative;
285
+ overflow: hidden;
286
+ }
287
+
288
+ .modal-examples :global(.modal-overlay) {
289
+ height: 100%;
290
+ width: 100%;
291
+ }
292
+
293
+ .example-section {
294
+ margin-bottom: 32px;
295
+ }
296
+
297
+ .example-section h3 {
298
+ margin-bottom: 16px;
299
+ color: var(--text1, #ffffff);
300
+ font-size: 18px;
301
+ font-weight: 600;
302
+ }
303
+
304
+ .button-grid {
305
+ display: grid;
306
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
307
+ gap: 12px;
308
+ margin-bottom: 16px;
309
+ }
310
+
311
+ h2 {
312
+ color: var(--text1, #ffffff);
313
+ margin-bottom: 8px;
314
+ }
315
+
316
+ p {
317
+ color: var(--text2, rgba(255, 255, 255, 0.8));
318
+ margin-bottom: 24px;
319
+ }
320
+ </style>
@@ -0,0 +1,3 @@
1
+ declare const Example: import("svelte").Component<Record<string, never>, {}, "">;
2
+ type Example = ReturnType<typeof Example>;
3
+ export default Example;
@@ -0,0 +1,18 @@
1
+ <!-- eslint-disable svelte/no-useless-children-snippet -->
2
+ <script module>
3
+ import { defineMeta } from '@storybook/addon-svelte-csf';
4
+
5
+ import Example from './Example.svelte';
6
+
7
+ // More on how to set up stories at: https://storybook.js.org/docs/writing-stories
8
+ const { Story } = defineMeta({
9
+ title: 'UI/Modal',
10
+ component: Example,
11
+ tags: ['autodocs']
12
+ });
13
+ </script>
14
+
15
+ <!-- Interactive Examples -->
16
+ <Story name="Examples">
17
+ <Example />
18
+ </Story>
@@ -0,0 +1,26 @@
1
+ export default Modal;
2
+ type Modal = SvelteComponent<{
3
+ [x: string]: never;
4
+ }, {
5
+ [evt: string]: CustomEvent<any>;
6
+ }, {}> & {
7
+ $$bindings?: string | undefined;
8
+ };
9
+ declare const Modal: $$__sveltets_2_IsomorphicComponent<{
10
+ [x: string]: never;
11
+ }, {
12
+ [evt: string]: CustomEvent<any>;
13
+ }, {}, {}, string>;
14
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
15
+ new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
16
+ $$bindings?: Bindings;
17
+ } & Exports;
18
+ (internal: unknown, props: {
19
+ $$events?: Events;
20
+ $$slots?: Slots;
21
+ }): Exports & {
22
+ $set?: any;
23
+ $on?: any;
24
+ };
25
+ z_$$bindings?: Bindings;
26
+ }