@purpurds/modal 5.11.2 → 5.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/styles.css CHANGED
@@ -1 +1 @@
1
- ._purpur-notification_10qwf_1{display:flex;flex-direction:column;padding:var(--purpur-spacing-200) var(--purpur-spacing-200) var(--purpur-spacing-200) var(--purpur-spacing-250);box-sizing:border-box;width:100%;background:var(--purpur-color-background-primary);border-radius:var(--purpur-border-radius-md);border:var(--purpur-border-width-sm) solid;border-left:var(--purpur-border-width-lg) solid;gap:var(--purpur-spacing-150);position:relative}._purpur-notification__top_10qwf_14{display:flex;align-items:flex-start;align-self:stretch;justify-content:space-between}._purpur-notification__header_10qwf_20{display:flex;align-items:center;gap:var(--purpur-spacing-100)}._purpur-notification__close-button_10qwf_25{position:absolute;right:calc(var(--purpur-spacing-50) + var(--purpur-spacing-25));top:calc(var(--purpur-spacing-50) + var(--purpur-spacing-25))}._purpur-notification__icon_10qwf_30{flex-shrink:0}._purpur-notification__body_10qwf_33{padding:var(--purpur-spacing-0) var(--purpur-spacing-150) var(--purpur-spacing-50) var(--purpur-spacing-0)}._purpur-notification--success_10qwf_36{border-color:var(--purpur-color-border-status-success)}._purpur-notification--success_10qwf_36 ._purpur-notification__heading_10qwf_39{color:var(--purpur-color-text-status-success-strong)}._purpur-notification--success_10qwf_36 ._purpur-notification__icon_10qwf_30{color:var(--purpur-color-text-status-success-medium)}._purpur-notification--warning_10qwf_45{border-color:var(--purpur-color-border-status-warning)}._purpur-notification--warning_10qwf_45 ._purpur-notification__heading_10qwf_39{color:var(--purpur-color-text-status-warning-strong)}._purpur-notification--warning_10qwf_45 ._purpur-notification__icon_10qwf_30{color:var(--purpur-color-text-status-warning-medium)}._purpur-notification--error_10qwf_54{border-color:var(--purpur-color-border-status-error)}._purpur-notification--error_10qwf_54 ._purpur-notification__heading_10qwf_39{color:var(--purpur-color-text-status-error-strong)}._purpur-notification--error_10qwf_54 ._purpur-notification__icon_10qwf_30{color:var(--purpur-color-text-status-error-medium)}._purpur-notification--info_10qwf_63{border-color:var(--purpur-color-border-status-info)}._purpur-notification--info_10qwf_63 ._purpur-notification__heading_10qwf_39{color:var(--purpur-color-text-status-info-strong)}._purpur-notification--info_10qwf_63 ._purpur-notification__icon_10qwf_30{color:var(--purpur-color-text-status-info-medium)}._purpur-notification--hidden_10qwf_72{display:none;visibility:hidden}._purpur-notification--has-close-button_10qwf_76 ._purpur-notification__top_10qwf_14{padding-right:var(--purpur-spacing-400)}._purpur-modal-content_rblrn_1{position:fixed;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;overflow:auto;background-color:var(--purpur-color-background-primary);animation:_fadeIn_rblrn_1 var(--purpur-motion-duration-200) var(--purpur-motion-easing-ease-in-out)}._purpur-modal-content_rblrn_1:focus{outline:0}@media (min-width: 600px){._purpur-modal-content_rblrn_1{inset:unset;top:50%;left:50%;width:720px;max-width:calc(100% - var(--purpur-spacing-300) * 2);min-height:320px;max-height:80%;overflow:hidden;border-radius:var(--purpur-border-radius-lg);box-sizing:border-box;transform:translate(-50%,-50%);box-shadow:var(--purpur-shadow-lg)}}@media (min-width: 600px){._purpur-modal-content__overlay_rblrn_30{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--purpur-color-overlay-default);animation:_fadeIn_rblrn_1 var(--purpur-motion-duration-200) var(--purpur-motion-easing-ease-in-out)}}._purpur-modal-content_rblrn_1 ._purpur-modal-content__close-button_rblrn_37{position:absolute;top:var(--purpur-spacing-100);right:var(--purpur-spacing-100);z-index:2}@media (min-width: 600px){._purpur-modal-content_rblrn_1 ._purpur-modal-content__close-button_rblrn_37{top:var(--purpur-spacing-150)}}._purpur-modal-content__wrapper_rblrn_48{height:100%;overflow:auto}@media (min-width: 600px){._purpur-modal-content__wrapper_rblrn_48{display:flex;flex-direction:column;overflow:hidden}}._purpur-modal-content__wrapper-inner_rblrn_59{display:flex;flex-direction:column}@media (min-width: 600px){._purpur-modal-content__wrapper-inner_rblrn_59{overflow:hidden}}._purpur-modal-content__image-wrapper_rblrn_68{position:relative;flex-shrink:0;order:-1;width:100%;aspect-ratio:2/1;overflow:hidden}@media (((min-width: 600px) and (max-width: 649px) and (max-height: 720px)) or ((min-width: 650px) and (max-height: 820px))){._purpur-modal-content__image-wrapper_rblrn_68{aspect-ratio:3/1}}._purpur-modal-content__image-wrapper_rblrn_68 img{position:absolute;top:50%;left:50%;display:block;width:100%;height:auto;transform:translate(-50%,-50%)}._purpur-modal-content__header_rblrn_91{position:sticky;top:0;flex-grow:0;padding:var(--purpur-spacing-200) calc(var(--purpur-spacing-600) + var(--purpur-spacing-150)) 0 var(--purpur-spacing-200);background:var(--purpur-color-background-primary);z-index:1}@media (min-width: 600px){._purpur-modal-content__header_rblrn_91{position:static;padding:var(--purpur-spacing-250) calc(var(--purpur-spacing-800) + var(--purpur-spacing-50)) 0 var(--purpur-spacing-300)}}._purpur-modal-content__title_rblrn_105,._purpur-modal-content__description_rblrn_108{margin:0}._purpur-modal-content__body_rblrn_111{padding:var(--purpur-spacing-200) var(--purpur-spacing-200) 0}@media (min-width: 600px){._purpur-modal-content__body_rblrn_111{height:100%;overflow:auto;padding:var(--purpur-spacing-250) var(--purpur-spacing-300) 0}}._purpur-modal-content__body-inner_rblrn_121{position:relative;display:flex;flex-direction:column;gap:var(--purpur-spacing-400);padding-bottom:var(--purpur-spacing-250)}@media (min-width: 600px){._purpur-modal-content__body-inner_rblrn_121{padding-bottom:var(--purpur-spacing-300)}}._purpur-modal-content__actions-buttons_rblrn_133{display:flex;flex-direction:column;gap:var(--purpur-spacing-200);margin-top:auto}@media (min-width: 600px){._purpur-modal-content__actions-buttons_rblrn_133{flex-direction:row-reverse;flex-grow:0}}._purpur-modal-content__actions-button_rblrn_133{width:100%}@media (min-width: 600px){._purpur-modal-content__actions-button_rblrn_133{width:auto}._purpur-modal-content__actions-button_rblrn_133:nth-child(3){margin-right:auto}}._purpur-modal-content__notification_rblrn_156{padding-top:var(--purpur-spacing-300)}._purpur-modal-content--with-image_rblrn_159:not(._purpur-modal-content--overflow_rblrn_159) ._purpur-modal-content__header_rblrn_91{padding-top:var(--purpur-spacing-250)}@media (min-width: 600px){._purpur-modal-content--overflow_rblrn_159:not(._purpur-modal-content--with-image_rblrn_159) ._purpur-modal-content__header_rblrn_91{position:relative}._purpur-modal-content--overflow_rblrn_159:not(._purpur-modal-content--with-image_rblrn_159) ._purpur-modal-content__close-button_rblrn_37{top:50%;transform:translateY(-50%)}}._purpur-modal-content--overflow_rblrn_159 ._purpur-modal-content__header_rblrn_91{padding-bottom:var(--purpur-spacing-200);border-bottom:1px solid var(--purpur-color-border-weak)}._purpur-modal-content--overflow_rblrn_159 ._purpur-modal-content__body_rblrn_111{padding-top:var(--purpur-spacing-300)}@media (min-width: 600px){._purpur-modal-content--overflow_rblrn_159 ._purpur-modal-content__body_rblrn_111{padding-top:var(--purpur-spacing-400)}}._purpur-modal-content--overflow_rblrn_159 ._purpur-modal-content__actions_rblrn_133{position:relative}._purpur-modal-content--overflow_rblrn_159 ._purpur-modal-content__actions-buttons_rblrn_133{position:relative;z-index:2}._purpur-modal-content--overflow_rblrn_159 ._purpur-modal-content__actions-separator_rblrn_190{position:absolute;bottom:calc(100% - 1px);left:0;z-index:1;width:calc(100% - var(--purpur-spacing-300));height:calc(var(--purpur-spacing-400) + var(--purpur-spacing-100));background:linear-gradient(transparent,var(--purpur-color-background-primary));pointer-events:none}._purpur-modal-content--overflow_rblrn_159._purpur-modal-content--sticky-footer_rblrn_200 ._purpur-modal-content__actions-buttons_rblrn_133{border-top:1px solid var(--purpur-color-border-weak)}._purpur-modal-content--sticky-footer_rblrn_200{justify-content:space-between}._purpur-modal-content--sticky-footer_rblrn_200 ._purpur-modal-content__body-inner_rblrn_121{padding-bottom:var(--purpur-spacing-300)}._purpur-modal-content--sticky-footer_rblrn_200 ._purpur-modal-content__actions-buttons_rblrn_133{padding:var(--purpur-spacing-200)}@media (min-width: 600px){._purpur-modal-content--sticky-footer_rblrn_200 ._purpur-modal-content__actions-buttons_rblrn_133{padding-left:var(--purpur-spacing-300);padding-right:var(--purpur-spacing-300)}}._purpur-modal-content--sticky-footer_rblrn_200 ._purpur-modal-content__notification_rblrn_156{padding:var(--purpur-spacing-100) var(--purpur-spacing-300) var(--purpur-spacing-200)}@keyframes _fadeIn_rblrn_1{0%{opacity:0}to{opacity:1}}
1
+ ._purpur-notification_10qwf_1{display:flex;flex-direction:column;padding:var(--purpur-spacing-200) var(--purpur-spacing-200) var(--purpur-spacing-200) var(--purpur-spacing-250);box-sizing:border-box;width:100%;background:var(--purpur-color-background-primary);border-radius:var(--purpur-border-radius-md);border:var(--purpur-border-width-sm) solid;border-left:var(--purpur-border-width-lg) solid;gap:var(--purpur-spacing-150);position:relative}._purpur-notification__top_10qwf_14{display:flex;align-items:flex-start;align-self:stretch;justify-content:space-between}._purpur-notification__header_10qwf_20{display:flex;align-items:center;gap:var(--purpur-spacing-100)}._purpur-notification__close-button_10qwf_25{position:absolute;right:calc(var(--purpur-spacing-50) + var(--purpur-spacing-25));top:calc(var(--purpur-spacing-50) + var(--purpur-spacing-25))}._purpur-notification__icon_10qwf_30{flex-shrink:0}._purpur-notification__body_10qwf_33{padding:var(--purpur-spacing-0) var(--purpur-spacing-150) var(--purpur-spacing-50) var(--purpur-spacing-0)}._purpur-notification--success_10qwf_36{border-color:var(--purpur-color-border-status-success)}._purpur-notification--success_10qwf_36 ._purpur-notification__heading_10qwf_39{color:var(--purpur-color-text-status-success-strong)}._purpur-notification--success_10qwf_36 ._purpur-notification__icon_10qwf_30{color:var(--purpur-color-text-status-success-medium)}._purpur-notification--warning_10qwf_45{border-color:var(--purpur-color-border-status-warning)}._purpur-notification--warning_10qwf_45 ._purpur-notification__heading_10qwf_39{color:var(--purpur-color-text-status-warning-strong)}._purpur-notification--warning_10qwf_45 ._purpur-notification__icon_10qwf_30{color:var(--purpur-color-text-status-warning-medium)}._purpur-notification--error_10qwf_54{border-color:var(--purpur-color-border-status-error)}._purpur-notification--error_10qwf_54 ._purpur-notification__heading_10qwf_39{color:var(--purpur-color-text-status-error-strong)}._purpur-notification--error_10qwf_54 ._purpur-notification__icon_10qwf_30{color:var(--purpur-color-text-status-error-medium)}._purpur-notification--info_10qwf_63{border-color:var(--purpur-color-border-status-info)}._purpur-notification--info_10qwf_63 ._purpur-notification__heading_10qwf_39{color:var(--purpur-color-text-status-info-strong)}._purpur-notification--info_10qwf_63 ._purpur-notification__icon_10qwf_30{color:var(--purpur-color-text-status-info-medium)}._purpur-notification--hidden_10qwf_72{display:none;visibility:hidden}._purpur-notification--has-close-button_10qwf_76 ._purpur-notification__top_10qwf_14{padding-right:var(--purpur-spacing-400)}._purpur-modal-content_1ifm3_1{position:fixed;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;overflow:auto;background-color:var(--purpur-color-background-primary);animation:_fadeIn_1ifm3_1 var(--purpur-motion-duration-200) var(--purpur-motion-easing-ease-in-out)}._purpur-modal-content_1ifm3_1:focus{outline:0}@media (min-width: 600px){._purpur-modal-content_1ifm3_1{inset:unset;top:50%;left:50%;width:720px;max-width:calc(100% - var(--purpur-spacing-300) * 2);min-height:320px;max-height:80%;overflow:hidden;border-radius:var(--purpur-border-radius-lg);box-sizing:border-box;transform:translate(-50%,-50%);box-shadow:var(--purpur-shadow-lg)}}@media (min-width: 600px){._purpur-modal-content__overlay_1ifm3_30{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--purpur-color-overlay-default);animation:_fadeIn_1ifm3_1 var(--purpur-motion-duration-200) var(--purpur-motion-easing-ease-in-out)}}._purpur-modal-content_1ifm3_1 ._purpur-modal-content__close-button_1ifm3_37{position:absolute;top:var(--purpur-spacing-100);right:var(--purpur-spacing-100);z-index:2}@media (min-width: 600px){._purpur-modal-content_1ifm3_1 ._purpur-modal-content__close-button_1ifm3_37{top:var(--purpur-spacing-150)}}._purpur-modal-content__wrapper_1ifm3_48{height:100%;overflow:auto}@media (min-width: 600px){._purpur-modal-content__wrapper_1ifm3_48{display:flex;flex-direction:column}}._purpur-modal-content__wrapper-inner_1ifm3_58{display:flex;flex-direction:column}._purpur-modal-content__image-wrapper_1ifm3_62{position:relative;flex-shrink:0;order:-1;width:100%;aspect-ratio:2/1;overflow:hidden}@media (((min-width: 600px) and (max-width: 649px) and (max-height: 720px)) or ((min-width: 650px) and (max-height: 820px))){._purpur-modal-content__image-wrapper_1ifm3_62{aspect-ratio:3/1}}._purpur-modal-content__image-wrapper_1ifm3_62 img{position:absolute;top:50%;left:50%;display:block;width:100%;height:auto;transform:translate(-50%,-50%)}._purpur-modal-content__header_1ifm3_85{position:sticky;top:0;flex-grow:0;padding:var(--purpur-spacing-200) calc(var(--purpur-spacing-600) + var(--purpur-spacing-150)) 0 var(--purpur-spacing-200);background:var(--purpur-color-background-primary);z-index:1}@media (min-width: 600px){._purpur-modal-content__header_1ifm3_85{padding:var(--purpur-spacing-250) calc(var(--purpur-spacing-800) + var(--purpur-spacing-50)) 0 var(--purpur-spacing-300)}}._purpur-modal-content__title_1ifm3_98,._purpur-modal-content__description_1ifm3_101{margin:0}._purpur-modal-content__body_1ifm3_104{padding:var(--purpur-spacing-200) var(--purpur-spacing-200) 0}@media (min-width: 600px){._purpur-modal-content__body_1ifm3_104{padding:var(--purpur-spacing-250) var(--purpur-spacing-300) 0}}._purpur-modal-content__body-inner_1ifm3_112{position:relative;display:flex;flex-direction:column;gap:var(--purpur-spacing-400);padding-bottom:var(--purpur-spacing-250)}@media (min-width: 600px){._purpur-modal-content__body-inner_1ifm3_112{padding-bottom:var(--purpur-spacing-300)}}._purpur-modal-content__actions-buttons_1ifm3_124{display:flex;flex-direction:column;gap:var(--purpur-spacing-200);margin-top:auto}@media (min-width: 600px){._purpur-modal-content__actions-buttons_1ifm3_124{flex-direction:row-reverse;flex-grow:0}}._purpur-modal-content__actions-button_1ifm3_124{width:100%}@media (min-width: 600px){._purpur-modal-content__actions-button_1ifm3_124{width:auto}._purpur-modal-content__actions-button_1ifm3_124:nth-child(3){margin-right:auto}}._purpur-modal-content__notification_1ifm3_147{padding-top:var(--purpur-spacing-300)}._purpur-modal-content--with-image_1ifm3_150:not(._purpur-modal-content--overflow_1ifm3_150) ._purpur-modal-content__header_1ifm3_85{padding-top:var(--purpur-spacing-250)}@media (min-width: 600px){._purpur-modal-content--overflow_1ifm3_150:not(._purpur-modal-content--with-image_1ifm3_150) ._purpur-modal-content__header_1ifm3_85{position:relative}._purpur-modal-content--overflow_1ifm3_150:not(._purpur-modal-content--with-image_1ifm3_150) ._purpur-modal-content__close-button_1ifm3_37{top:50%;transform:translateY(-50%)}}._purpur-modal-content--overflow_1ifm3_150 ._purpur-modal-content__header_1ifm3_85{padding-bottom:var(--purpur-spacing-200);border-bottom:1px solid var(--purpur-color-border-weak)}._purpur-modal-content--overflow_1ifm3_150 ._purpur-modal-content__body_1ifm3_104{padding-top:var(--purpur-spacing-300)}@media (min-width: 600px){._purpur-modal-content--overflow_1ifm3_150 ._purpur-modal-content__body_1ifm3_104{padding-top:var(--purpur-spacing-400)}}._purpur-modal-content--overflow_1ifm3_150 ._purpur-modal-content__actions_1ifm3_124{position:relative}._purpur-modal-content--overflow_1ifm3_150 ._purpur-modal-content__actions-buttons_1ifm3_124{position:relative;z-index:2}._purpur-modal-content--overflow_1ifm3_150 ._purpur-modal-content__actions-separator_1ifm3_181{position:absolute;bottom:calc(100% - 1px);left:0;z-index:1;width:calc(100% - var(--purpur-spacing-300));height:calc(var(--purpur-spacing-400) + var(--purpur-spacing-100));background:linear-gradient(transparent,var(--purpur-color-background-primary));pointer-events:none}._purpur-modal-content--overflow_1ifm3_150._purpur-modal-content--sticky-footer_1ifm3_191 ._purpur-modal-content__actions-buttons_1ifm3_124{border-top:1px solid var(--purpur-color-border-weak)}._purpur-modal-content--sticky-footer_1ifm3_191{justify-content:space-between}._purpur-modal-content--sticky-footer_1ifm3_191 ._purpur-modal-content__body-inner_1ifm3_112{padding-bottom:var(--purpur-spacing-300)}._purpur-modal-content--sticky-footer_1ifm3_191 ._purpur-modal-content__actions-buttons_1ifm3_124{padding:var(--purpur-spacing-200)}@media (min-width: 600px){._purpur-modal-content--sticky-footer_1ifm3_191 ._purpur-modal-content__actions-buttons_1ifm3_124{padding-left:var(--purpur-spacing-300);padding-right:var(--purpur-spacing-300)}}._purpur-modal-content--sticky-footer_1ifm3_191 ._purpur-modal-content__notification_1ifm3_147{padding:var(--purpur-spacing-100) var(--purpur-spacing-300) var(--purpur-spacing-200)}@keyframes _fadeIn_1ifm3_1{0%{opacity:0}to{opacity:1}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@purpurds/modal",
3
- "version": "5.11.2",
3
+ "version": "5.13.0",
4
4
  "license": "AGPL-3.0-only",
5
5
  "main": "./dist/modal.cjs.js",
6
6
  "types": "./dist/modal.d.ts",
@@ -16,14 +16,14 @@
16
16
  "dependencies": {
17
17
  "@radix-ui/react-dialog": "~1.0.5",
18
18
  "classnames": "~2.5.0",
19
- "@purpurds/button": "5.11.2",
20
- "@purpurds/paragraph": "5.11.2",
21
- "@purpurds/text-spacing": "5.11.2",
22
- "@purpurds/tokens": "5.11.2",
23
- "@purpurds/visually-hidden": "5.11.2",
24
- "@purpurds/heading": "5.11.2",
25
- "@purpurds/notification": "5.11.2",
26
- "@purpurds/icon": "5.11.2"
19
+ "@purpurds/button": "5.13.0",
20
+ "@purpurds/icon": "5.13.0",
21
+ "@purpurds/heading": "5.13.0",
22
+ "@purpurds/paragraph": "5.13.0",
23
+ "@purpurds/text-spacing": "5.13.0",
24
+ "@purpurds/visually-hidden": "5.13.0",
25
+ "@purpurds/tokens": "5.13.0",
26
+ "@purpurds/notification": "5.13.0"
27
27
  },
28
28
  "devDependencies": {
29
29
  "@rushstack/eslint-patch": "~1.10.0",
@@ -59,17 +59,12 @@ $fadeIn: fadeIn var(--purpur-motion-duration-200) var(--purpur-motion-easing-eas
59
59
  @media (min-width: $purpur-breakpoint-md) {
60
60
  display: flex;
61
61
  flex-direction: column;
62
- overflow: hidden;
63
62
  }
64
63
  }
65
64
 
66
65
  &__wrapper-inner {
67
66
  display: flex;
68
67
  flex-direction: column;
69
-
70
- @media (min-width: $purpur-breakpoint-md) {
71
- overflow: hidden;
72
- }
73
68
  }
74
69
 
75
70
  &__image-wrapper {
@@ -100,15 +95,12 @@ $fadeIn: fadeIn var(--purpur-motion-duration-200) var(--purpur-motion-easing-eas
100
95
  position: sticky;
101
96
  top: 0;
102
97
  flex-grow: 0;
103
- padding: var(--purpur-spacing-200) calc(var(--purpur-spacing-600) + var(--purpur-spacing-150)) 0
104
- var(--purpur-spacing-200);
98
+ padding: var(--purpur-spacing-200) calc(var(--purpur-spacing-600) + var(--purpur-spacing-150)) 0 var(--purpur-spacing-200);
105
99
  background: var(--purpur-color-background-primary);
106
100
  z-index: 1;
107
101
 
108
102
  @media (min-width: $purpur-breakpoint-md) {
109
- position: static;
110
- padding: var(--purpur-spacing-250) calc(var(--purpur-spacing-800) + var(--purpur-spacing-50))
111
- 0 var(--purpur-spacing-300);
103
+ padding: var(--purpur-spacing-250) calc(var(--purpur-spacing-800) + var(--purpur-spacing-50)) 0 var(--purpur-spacing-300);
112
104
  }
113
105
  }
114
106
 
@@ -124,8 +116,6 @@ $fadeIn: fadeIn var(--purpur-motion-duration-200) var(--purpur-motion-easing-eas
124
116
  padding: var(--purpur-spacing-200) var(--purpur-spacing-200) 0;
125
117
 
126
118
  @media (min-width: $purpur-breakpoint-md) {
127
- height: 100%;
128
- overflow: auto;
129
119
  padding: var(--purpur-spacing-250) var(--purpur-spacing-300) 0;
130
120
  }
131
121
  }
@@ -256,4 +246,4 @@ $fadeIn: fadeIn var(--purpur-motion-duration-200) var(--purpur-motion-easing-eas
256
246
  to {
257
247
  opacity: 1;
258
248
  }
259
- }
249
+ }
@@ -4,7 +4,6 @@ import { Button, ButtonVariant } from "@purpurds/button";
4
4
  import { Heading } from "@purpurds/heading";
5
5
  import { IconClose } from "@purpurds/icon";
6
6
  import { Paragraph } from "@purpurds/paragraph";
7
- import { purpurBreakpointMd } from "@purpurds/tokens";
8
7
  import { VisuallyHidden } from "@purpurds/visually-hidden";
9
8
  import * as RadixDialog from "@radix-ui/react-dialog";
10
9
  import c from "classnames/bind";
@@ -20,7 +19,7 @@ export type DefaultProps = {
20
19
  /**
21
20
  * An array of actions to be displayed at the bottom of the modal in the form of buttons. A maximum of 3 buttons will be rendered,
22
21
  * */
23
- actions?: Array<{ label: string; onClick: () => void }>;
22
+ actions?: Array<{ label: string; onClick: () => void; disabled?: boolean; loading?: boolean }>;
24
23
  children: ReactNode;
25
24
  className?: string;
26
25
  /**
@@ -117,8 +116,6 @@ export const ModalContent = forwardRef(
117
116
  const [contentOverflow, setContentOverflow] = useState(false);
118
117
  const wrapperRef = useRef<HTMLDivElement>(null);
119
118
  const wrapperInnerRef = useRef<HTMLDivElement>(null);
120
- const bodyWrapperRef = useRef<HTMLDivElement>(null);
121
- const bodyInnerRef = useRef<HTMLDivElement>(null);
122
119
 
123
120
  const classes = cx([
124
121
  rootClassName,
@@ -137,25 +134,13 @@ export const ModalContent = forwardRef(
137
134
  };
138
135
 
139
136
  const handleContentOverflow = useCallback(() => {
140
- if (
141
- !wrapperRef.current ||
142
- !wrapperInnerRef.current ||
143
- !bodyWrapperRef.current ||
144
- !bodyInnerRef.current
145
- ) {
137
+ if (!wrapperRef.current || !wrapperInnerRef.current) {
146
138
  return;
147
139
  }
148
140
 
149
- const isMobile = window.innerWidth < parseInt(purpurBreakpointMd);
150
-
151
- const computedStyle = window.getComputedStyle(
152
- isMobile ? wrapperRef.current : bodyWrapperRef.current,
153
- null
154
- );
141
+ const computedStyle = window.getComputedStyle(wrapperRef.current, null);
155
142
  const wrapperHeight = parseFloat(computedStyle.getPropertyValue("height"));
156
- const innerHeight = isMobile
157
- ? wrapperInnerRef.current.offsetHeight
158
- : bodyInnerRef.current.offsetHeight;
143
+ const innerHeight = wrapperInnerRef.current.offsetHeight;
159
144
 
160
145
  setContentOverflow(wrapperHeight < innerHeight);
161
146
  }, []);
@@ -226,8 +211,8 @@ export const ModalContent = forwardRef(
226
211
  {image}
227
212
  </div>
228
213
  )}
229
- <div ref={bodyWrapperRef} className={cx(`${rootClassName}__body`)}>
230
- <div ref={bodyInnerRef} className={cx(`${rootClassName}__body-inner`)}>
214
+ <div className={cx(`${rootClassName}__body`)}>
215
+ <div className={cx(`${rootClassName}__body-inner`)}>
231
216
  {description && hideDescription && (
232
217
  <VisuallyHidden asChild>
233
218
  <RadixDialog.Description data-testid={getTestId("description")}>
@@ -301,7 +286,7 @@ export const ModalActions = ({
301
286
  primaryActionVariant,
302
287
  notification,
303
288
  }: Pick<ModalContentProps, "actions" | "notification"> & {
304
- primaryActionVariant?: "primary" | "expressive" | "destructive";
289
+ primaryActionVariant?: PrimaryActionVariant;
305
290
  }) => {
306
291
  const notificationRef = useRef<HTMLDivElement>(null);
307
292
  const buttonVariants = [primaryActionVariant, "secondary", "text"];
@@ -315,17 +300,21 @@ export const ModalActions = ({
315
300
  return actions && actions.length > 0 ? (
316
301
  <div className={cx(`${rootClassName}__actions`)}>
317
302
  <div className={cx(`${rootClassName}__actions-buttons`)} data-testid="modal actions">
318
- {actions.slice(0, MAX_NUMBER_OF_ACTIONS).map(({ label, onClick }, index) => (
319
- <Button
320
- key={label}
321
- data-testid="modal actions button"
322
- variant={(buttonVariants[index] as ButtonVariant) || ""}
323
- onClick={onClick}
324
- className={cx(`${rootClassName}__actions-button`)}
325
- >
326
- {label}
327
- </Button>
328
- ))}
303
+ {actions
304
+ .slice(0, MAX_NUMBER_OF_ACTIONS)
305
+ .map(({ label, onClick, disabled, loading }, index) => (
306
+ <Button
307
+ key={label}
308
+ data-testid="modal actions button"
309
+ variant={(buttonVariants[index] as ButtonVariant) || ""}
310
+ onClick={onClick}
311
+ disabled={disabled}
312
+ loading={loading}
313
+ className={cx(`${rootClassName}__actions-button`)}
314
+ >
315
+ {label}
316
+ </Button>
317
+ ))}
329
318
  </div>
330
319
  {notification && (
331
320
  <div className={cx(`${rootClassName}__notification`)} ref={notificationRef}>
@@ -77,7 +77,7 @@ export const Showcase: Story = {
77
77
  stickyButtons
78
78
  zIndex={Z_INDEX_TO_MAKE_IT_LOOK_GOOD_IN_STORYBOOK}
79
79
  >
80
- <Paragraph variant="paragraph-100">
80
+ <Paragraph>
81
81
  By clicking &quot;I accept cookies&quot; you consent to the storage of cookies on your
82
82
  device to improve website navigation, analyze website usage and assist in our
83
83
  marketing efforts.
@@ -95,7 +95,7 @@ export const Showcase: Story = {
95
95
  zIndex={Z_INDEX_TO_MAKE_IT_LOOK_GOOD_IN_STORYBOOK}
96
96
  >
97
97
  <TextSpacing>
98
- <Paragraph variant="paragraph-100">
98
+ <Paragraph>
99
99
  We are Telia Sverige AB (org. nr 556430-0142), (hereafter ‘Telia’). In this Privacy
100
100
  policy we describe how we, as the controller, process and protect your personal data
101
101
  (hereafter ‘data’). Telia recognizes that the protection of your personal data is
@@ -104,14 +104,14 @@ export const Showcase: Story = {
104
104
  the General Data Protection Regulation (GDPR), the Data Protection Act 2018:2181 ,
105
105
  The Electronic Communications Act 2022:
106
106
  </Paragraph>
107
- <Paragraph variant="paragraph-100">
107
+ <Paragraph>
108
108
  This Privacy policy applies to the processing of personal data of individuals,
109
109
  regardless of whether you are a consumer or business customer. In addition, Telia
110
110
  may have service-specific privacy policys, which describe the processing of personal
111
111
  data in the context of a specific service. These can be found along with the
112
112
  specific services that we provide.
113
113
  </Paragraph>
114
- <Paragraph variant="paragraph-100">This Privacy policy sets out:</Paragraph>
114
+ <Paragraph>This Privacy policy sets out:</Paragraph>
115
115
  <ul>
116
116
  <li>how we collect personal data</li>
117
117
  <li>what personal data we process</li>
@@ -124,7 +124,7 @@ export const Showcase: Story = {
124
124
  can execute these rights.
125
125
  </li>
126
126
  </ul>
127
- <Paragraph variant="paragraph-100">
127
+ <Paragraph>
128
128
  This Privacy policy does not apply to the processing of personal data processed by
129
129
  other companies when you are using their services or websites, even if they were
130
130
  accessed through Telia&apos;s communications network or services.
@@ -145,7 +145,7 @@ export const Showcase: Story = {
145
145
  stickyButtons={false}
146
146
  zIndex={Z_INDEX_TO_MAKE_IT_LOOK_GOOD_IN_STORYBOOK}
147
147
  >
148
- <Paragraph variant="paragraph-100">
148
+ <Paragraph>
149
149
  Upon termination of the main subscription, all related data sims and e-sims are
150
150
  terminated. The notice period may vary.
151
151
  </Paragraph>
@@ -158,6 +158,11 @@ export const Showcase: Story = {
158
158
 
159
159
  export const ModalContentWithImage: Story = {
160
160
  render: () => {
161
+ const actions = [
162
+ { label: "Primary action", onClick: () => {} },
163
+ { label: "Secondary action", onClick: () => {} },
164
+ ];
165
+
161
166
  return (
162
167
  <div style={{ display: "flex", gap: "var(--purpur-spacing-200)" }}>
163
168
  <Modal>
@@ -165,6 +170,8 @@ export const ModalContentWithImage: Story = {
165
170
  <Button variant="primary">Open</Button>
166
171
  </Modal.Trigger>
167
172
  <Modal.Content
173
+ closeButtonAllyLabel="Close"
174
+ showCloseButton
168
175
  zIndex={Z_INDEX_TO_MAKE_IT_LOOK_GOOD_IN_STORYBOOK}
169
176
  image={
170
177
  // eslint-disable-next-line react/jsx-wrap-multilines
@@ -173,21 +180,57 @@ export const ModalContentWithImage: Story = {
173
180
  alt="Familjens unga ser på tv tillsammans mysig stämning men spännande"
174
181
  />
175
182
  }
183
+ actions={actions}
176
184
  title="Modal with image"
177
185
  >
178
186
  <TextSpacing>
179
- <Paragraph variant="paragraph-100">
187
+ <Paragraph>
180
188
  Lorem ipsum dolor sit amet consectetur. Diam vitae leo amet tortor ut faucibus diam
181
189
  faucibus eu. Pellentesque quis pellentesque sit fermentum. Mi id aenean aliquam nibh
182
190
  placerat.Lorem ipsum dolor sit amet consectetur. Diam vitae leo amet tortor ut
183
191
  faucibus diam faucibus eu.
184
192
  </Paragraph>
185
- <Paragraph variant="paragraph-100">
193
+ <Paragraph>
186
194
  Pellentesque quis pellentesque sit fermentum. Mi id aenean aliquam nibh
187
195
  placerat.Lorem ipsum dolor sit amet consectetur. Diam vitae leo amet tortor ut
188
196
  faucibus diam faucibus eu. Pellentesque quis pellentesque sit fermentum. Mi id
189
197
  aenean aliquam nibh placerat.
190
198
  </Paragraph>
199
+ <Paragraph>
200
+ Donec at ipsum dui. Aenean vitae odio ultrices, efficitur justo vitae, dignissim
201
+ felis. Donec sodales sed sapien id commodo. In scelerisque, est nec lacinia dictum,
202
+ tellus nisi vulputate turpis, quis laoreet nisl nibh rhoncus nisi. Pellentesque vel
203
+ dictum elit. Curabitur suscipit diam ut dictum vestibulum. Pellentesque et mi ut ex
204
+ maximus dignissim. Maecenas id maximus magna. Nam venenatis sem elit, sit amet
205
+ varius tellus vulputate id. Etiam pharetra mollis tempus. Vestibulum quis euismod
206
+ mauris. Sed porta sagittis tempor. Aliquam fermentum, sem tempus fermentum rhoncus,
207
+ neque diam condimentum dui, nec sodales diam nunc sit amet velit. Aenean eu
208
+ hendrerit ligula, et sodales orci.
209
+ </Paragraph>
210
+ <Paragraph>
211
+ Nam imperdiet ante nulla, non bibendum odio fringilla at. Curabitur aliquam sem
212
+ diam, non eleifend ipsum hendrerit eu. Pellentesque bibendum, dolor et varius
213
+ imperdiet, risus metus auctor enim, consectetur dictum ex justo ut turpis. Nullam
214
+ vel ligula ex. Curabitur cursus, metus sit amet porta fermentum, odio leo ultricies
215
+ orci, sed ornare nisi enim et massa. Nulla cursus ex et lectus congue malesuada.
216
+ Aliquam consectetur sem eu mauris imperdiet convallis a eu eros. Nam turpis dui,
217
+ placerat sit amet lacus tincidunt, tempor volutpat ligula. Vivamus dapibus arcu eu
218
+ sollicitudin tempus. Nullam sollicitudin augue quis dictum eleifend. Sed condimentum
219
+ elit risus, tincidunt fermentum quam vulputate ut. In hac habitasse platea dictumst.
220
+ Fusce mattis gravida neque, non blandit tellus tempor sit amet. Aliquam tristique
221
+ accumsan mi sed tincidunt.
222
+ </Paragraph>
223
+ <Paragraph>
224
+ Nullam eu lacus et sapien faucibus blandit ac non ex. Maecenas eget nibh nisl. Nam
225
+ quam eros, fringilla sed tempor ut, semper a est. Nullam massa diam, vestibulum a
226
+ massa at, dignissim sagittis diam. Morbi malesuada, massa vel condimentum tincidunt,
227
+ turpis est elementum tellus, id blandit erat metus vitae neque. Donec et laoreet
228
+ magna. Mauris eget lorem ut orci eleifend imperdiet. Suspendisse a euismod nulla,
229
+ sed auctor neque. Quisque tempor sollicitudin vulputate. Phasellus auctor urna sed
230
+ nunc dignissim, in mollis leo tincidunt. Pellentesque venenatis suscipit ipsum.
231
+ Vestibulum at condimentum tortor. Donec vestibulum lorem eu odio pellentesque, id
232
+ pretium urna gravida.
233
+ </Paragraph>
191
234
  </TextSpacing>
192
235
  </Modal.Content>
193
236
  </Modal>
@@ -216,13 +259,13 @@ export const ModalContentWithNotification: Story = {
216
259
  title="Notification heading"
217
260
  >
218
261
  <TextSpacing>
219
- <Paragraph variant="paragraph-100">
262
+ <Paragraph>
220
263
  Lorem ipsum dolor sit amet consectetur. Diam vitae leo amet tortor ut faucibus diam
221
264
  faucibus eu. Pellentesque quis pellentesque sit fermentum. Mi id aenean aliquam nibh
222
265
  placerat.Lorem ipsum dolor sit amet consectetur. Diam vitae leo amet tortor ut
223
266
  faucibus diam faucibus eu.
224
267
  </Paragraph>
225
- <Paragraph variant="paragraph-100">
268
+ <Paragraph>
226
269
  Pellentesque quis pellentesque sit fermentum. Mi id aenean aliquam nibh
227
270
  placerat.Lorem ipsum dolor sit amet consectetur. Diam vitae leo amet tortor ut
228
271
  faucibus diam faucibus eu. Pellentesque quis pellentesque sit fermentum. Mi id