@mantine-vue/whatsapp-inbox 3.6.0 → 3.7.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.
@@ -1,6 +1,24 @@
1
1
  import type { VNodeChild } from 'vue';
2
2
  import type { EmitsToProps } from '@mantine-vue/core';
3
- import type { WhatsAppAttachment, WhatsAppContact, WhatsAppConversationSummary, WhatsAppMessageData, WhatsAppTemplate, WhatsAppUpload } from './types';
3
+ import type { WhatsAppAttachment, WhatsAppContact, WhatsAppConversationSummary, WhatsAppMessageData, WhatsAppTemplate, WhatsAppTemplateValues, WhatsAppUpload } from './types';
4
+ export interface WhatsAppTemplateSelectorSlotProps {
5
+ /** Whether the selector should be shown. */
6
+ opened: boolean;
7
+ /** Closes the selector without sending. */
8
+ close: () => void;
9
+ submit: (payload: {
10
+ template: WhatsAppTemplate;
11
+ values: WhatsAppTemplateValues;
12
+ }) => void;
13
+ /** Approved templates passed to the composer. */
14
+ templates: WhatsAppTemplate[];
15
+ /** Whether the template list is loading. */
16
+ loading: boolean;
17
+ /** Failure of the last template load. */
18
+ error: string | null | undefined;
19
+ /** Asks the consumer to load the templates again, through the `templatesRetryLoad` event. */
20
+ retryLoad: () => void;
21
+ }
4
22
  /**
5
23
  * Props forwarded to a component the inbox renders internally, plus the `on*` listeners for its
6
24
  * events so a nested object can subscribe to them.
@@ -120,6 +138,8 @@ export interface WhatsAppConversationSlots extends WhatsAppMessageSlots {
120
138
  templatePreview?: (props: {
121
139
  template: WhatsAppTemplate;
122
140
  }) => VNodeChild;
141
+ /** Replaces the composer's template modal with a dialog of your own. */
142
+ templateSelector?: (props: WhatsAppTemplateSelectorSlotProps) => VNodeChild;
123
143
  }
124
144
  /** Slots of the contact panel. */
125
145
  export interface WhatsAppContactPanelSlots {
@@ -1,7 +1,7 @@
1
1
  import type { VNodeChild } from 'vue';
2
2
  import type { BoxProps, Factory, ModalProps } from '@mantine-vue/core';
3
3
  import type { StylesApiProps } from '@mantine-vue/core/styles-api';
4
- import type { ForwardedProps } from '../../component-props';
4
+ import type { ForwardedProps, WhatsAppTemplateSelectorSlotProps } from '../../component-props';
5
5
  import type { WhatsAppInboxLabelsOverride } from '../../labels';
6
6
  import type { WhatsAppAttachmentsAddPayload, WhatsAppConversationCapabilities, WhatsAppMessageReference, WhatsAppOutgoingMessage, WhatsAppRejectedFile, WhatsAppTemplate, WhatsAppUpload } from '../../types';
7
7
  import type { WhatsAppAttachmentPreviewStylesNames } from '../WhatsAppAttachmentPreview';
@@ -35,6 +35,8 @@ export interface WhatsAppComposerSlots {
35
35
  templatePreview?: (props: {
36
36
  template: WhatsAppTemplate;
37
37
  }) => VNodeChild;
38
+ /** Replaces the template modal with a dialog of your own. */
39
+ templateSelector?: (props: WhatsAppTemplateSelectorSlotProps) => VNodeChild;
38
40
  }
39
41
  export interface WhatsAppComposerOwnProps extends StylesApiProps<WhatsAppComposerFactory> {
40
42
  /** Conversation the message is sent to. Included in every outgoing payload. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mantine-vue/whatsapp-inbox",
3
- "version": "3.6.0",
3
+ "version": "3.7.0",
4
4
  "description": "Backend-agnostic WhatsApp inbox components for Mantine Vue",
5
5
  "license": "MIT",
6
6
  "files": [
@@ -39,8 +39,8 @@
39
39
  "vue": "^3.5.0"
40
40
  },
41
41
  "peerDependencies": {
42
- "@mantine-vue/core": "3.6.0",
43
- "@mantine-vue/hooks": "3.6.0",
42
+ "@mantine-vue/core": "3.7.0",
43
+ "@mantine-vue/hooks": "3.7.0",
44
44
  "vue": "^3.5.0"
45
45
  }
46
46
  }
package/styles.css CHANGED
@@ -1081,7 +1081,7 @@
1081
1081
  font-style: italic;
1082
1082
  color: var(--mantine-color-dimmed);
1083
1083
  }
1084
- ._messageListRoot_1efgx_1 {
1084
+ ._messageListRoot_1xgoq_1 {
1085
1085
  position: relative;
1086
1086
  flex: 1;
1087
1087
  min-height: 0;
@@ -1090,12 +1090,12 @@
1090
1090
  background-color: var(--wa-conversation-bg, var(--mantine-color-default));
1091
1091
  }
1092
1092
 
1093
- ._messageListScrollArea_1efgx_10 {
1093
+ ._messageListScrollArea_1xgoq_10 {
1094
1094
  flex: 1;
1095
1095
  min-height: 0;
1096
1096
  }
1097
1097
 
1098
- ._messageListContent_1efgx_15 {
1098
+ ._messageListContent_1xgoq_15 {
1099
1099
  display: flex;
1100
1100
  flex-direction: column;
1101
1101
  gap: var(--mantine-spacing-xs);
@@ -1104,10 +1104,10 @@
1104
1104
  justify-content: flex-end;
1105
1105
  }
1106
1106
 
1107
- ._messageListItems_1efgx_24 {
1107
+ ._messageListItems_1xgoq_24 {
1108
1108
  display: flex;
1109
1109
  flex-direction: column;
1110
- gap: calc(0.125rem * var(--mantine-scale));
1110
+ gap: calc(0.375rem * var(--mantine-scale));
1111
1111
  list-style: none;
1112
1112
  margin: 0;
1113
1113
  padding: 0;
@@ -1117,30 +1117,30 @@
1117
1117
  * One day of messages. The divider sticks inside this box rather than inside the whole list,
1118
1118
  * so the label of the next day pushes the previous one out instead of stacking on top of it.
1119
1119
  */
1120
- ._messageListGroup_1efgx_37 {
1120
+ ._messageListGroup_1xgoq_37 {
1121
1121
  display: flex;
1122
1122
  flex-direction: column;
1123
1123
  }
1124
1124
 
1125
- ._messageListGroupItems_1efgx_42 {
1125
+ ._messageListGroupItems_1xgoq_42 {
1126
1126
  display: flex;
1127
1127
  flex-direction: column;
1128
- gap: calc(0.125rem * var(--mantine-scale));
1128
+ gap: calc(0.375rem * var(--mantine-scale));
1129
1129
  list-style: none;
1130
1130
  margin: 0;
1131
1131
  padding: 0;
1132
1132
  }
1133
1133
 
1134
- ._messageListItem_1efgx_24 {
1134
+ ._messageListItem_1xgoq_24 {
1135
1135
  display: flex;
1136
1136
  flex-direction: column;
1137
1137
  }
1138
1138
 
1139
- ._messageListItem_1efgx_24:where([data-first-of-run]) {
1140
- margin-top: calc(0.5rem * var(--mantine-scale));
1139
+ ._messageListItem_1xgoq_24:where([data-first-of-run]) {
1140
+ margin-top: calc(0.75rem * var(--mantine-scale));
1141
1141
  }
1142
1142
 
1143
- ._messageListDayDivider_1efgx_60 {
1143
+ ._messageListDayDivider_1xgoq_60 {
1144
1144
  display: flex;
1145
1145
  justify-content: center;
1146
1146
  padding-block: var(--mantine-spacing-xs);
@@ -1149,7 +1149,7 @@
1149
1149
  z-index: 1;
1150
1150
  }
1151
1151
 
1152
- ._messageListDayLabel_1efgx_69 {
1152
+ ._messageListDayLabel_1xgoq_69 {
1153
1153
  font-size: var(--mantine-font-size-xs);
1154
1154
  color: var(--mantine-color-dimmed);
1155
1155
  background-color: var(--mantine-color-body);
@@ -1158,13 +1158,13 @@
1158
1158
  box-shadow: 0 1px 0.5px rgba(0, 0, 0, 0.13);
1159
1159
  }
1160
1160
 
1161
- ._messageListLoadOlder_1efgx_78 {
1161
+ ._messageListLoadOlder_1xgoq_78 {
1162
1162
  display: flex;
1163
1163
  justify-content: center;
1164
1164
  padding-block: var(--mantine-spacing-xs);
1165
1165
  }
1166
1166
 
1167
- ._messageListState_1efgx_84 {
1167
+ ._messageListState_1xgoq_84 {
1168
1168
  display: flex;
1169
1169
  flex-direction: column;
1170
1170
  align-items: center;
@@ -1175,7 +1175,7 @@
1175
1175
  text-align: center;
1176
1176
  }
1177
1177
 
1178
- ._messageListScrollToBottom_1efgx_95 {
1178
+ ._messageListScrollToBottom_1xgoq_95 {
1179
1179
  position: absolute;
1180
1180
  inset-block-end: var(--mantine-spacing-md);
1181
1181
  inset-inline-end: var(--mantine-spacing-md);
@@ -1457,7 +1457,7 @@
1457
1457
  ._inboxRoot_1pu3o_1:where([data-narrow]) ._inboxPanel_1pu3o_39 {
1458
1458
  border-inline-start: none;
1459
1459
  }
1460
- ._modalRoot_1mb1l_1 {
1460
+ ._modalRoot_1xrov_1 {
1461
1461
  display: contents;
1462
1462
  }
1463
1463
 
@@ -1465,19 +1465,25 @@
1465
1465
  * The dialog is a column: the header keeps its own padding, and the body is the only part that
1466
1466
  * loses it so the conversation can run edge to edge.
1467
1467
  */
1468
- ._modalContent_1mb1l_9 {
1468
+ ._modalContent_1xrov_9 {
1469
1469
  display: flex;
1470
1470
  flex-direction: column;
1471
1471
  }
1472
1472
 
1473
- ._modalBody_1mb1l_14 {
1473
+ ._modalBody_1xrov_14 {
1474
1474
  display: flex;
1475
1475
  flex-direction: column;
1476
- flex: 1;
1476
+ flex: 0 1 auto;
1477
1477
  height: var(--wa-modal-height, 70vh);
1478
1478
  min-height: 0;
1479
+ overflow: hidden;
1479
1480
  padding: 0;
1480
1481
  }
1482
+
1483
+ ._modalRoot_1xrov_1:where([data-full-screen]) ._modalBody_1xrov_14 {
1484
+ flex: 1 1 0;
1485
+ height: auto;
1486
+ }
1481
1487
  ._drawerRoot_1qheq_1 {
1482
1488
  display: contents;
1483
1489
  }
package/styles.layer.css CHANGED
@@ -1082,7 +1082,7 @@
1082
1082
  font-style: italic;
1083
1083
  color: var(--mantine-color-dimmed);
1084
1084
  }
1085
- ._messageListRoot_1efgx_1 {
1085
+ ._messageListRoot_1xgoq_1 {
1086
1086
  position: relative;
1087
1087
  flex: 1;
1088
1088
  min-height: 0;
@@ -1091,12 +1091,12 @@
1091
1091
  background-color: var(--wa-conversation-bg, var(--mantine-color-default));
1092
1092
  }
1093
1093
 
1094
- ._messageListScrollArea_1efgx_10 {
1094
+ ._messageListScrollArea_1xgoq_10 {
1095
1095
  flex: 1;
1096
1096
  min-height: 0;
1097
1097
  }
1098
1098
 
1099
- ._messageListContent_1efgx_15 {
1099
+ ._messageListContent_1xgoq_15 {
1100
1100
  display: flex;
1101
1101
  flex-direction: column;
1102
1102
  gap: var(--mantine-spacing-xs);
@@ -1105,10 +1105,10 @@
1105
1105
  justify-content: flex-end;
1106
1106
  }
1107
1107
 
1108
- ._messageListItems_1efgx_24 {
1108
+ ._messageListItems_1xgoq_24 {
1109
1109
  display: flex;
1110
1110
  flex-direction: column;
1111
- gap: calc(0.125rem * var(--mantine-scale));
1111
+ gap: calc(0.375rem * var(--mantine-scale));
1112
1112
  list-style: none;
1113
1113
  margin: 0;
1114
1114
  padding: 0;
@@ -1118,30 +1118,30 @@
1118
1118
  * One day of messages. The divider sticks inside this box rather than inside the whole list,
1119
1119
  * so the label of the next day pushes the previous one out instead of stacking on top of it.
1120
1120
  */
1121
- ._messageListGroup_1efgx_37 {
1121
+ ._messageListGroup_1xgoq_37 {
1122
1122
  display: flex;
1123
1123
  flex-direction: column;
1124
1124
  }
1125
1125
 
1126
- ._messageListGroupItems_1efgx_42 {
1126
+ ._messageListGroupItems_1xgoq_42 {
1127
1127
  display: flex;
1128
1128
  flex-direction: column;
1129
- gap: calc(0.125rem * var(--mantine-scale));
1129
+ gap: calc(0.375rem * var(--mantine-scale));
1130
1130
  list-style: none;
1131
1131
  margin: 0;
1132
1132
  padding: 0;
1133
1133
  }
1134
1134
 
1135
- ._messageListItem_1efgx_24 {
1135
+ ._messageListItem_1xgoq_24 {
1136
1136
  display: flex;
1137
1137
  flex-direction: column;
1138
1138
  }
1139
1139
 
1140
- ._messageListItem_1efgx_24:where([data-first-of-run]) {
1141
- margin-top: calc(0.5rem * var(--mantine-scale));
1140
+ ._messageListItem_1xgoq_24:where([data-first-of-run]) {
1141
+ margin-top: calc(0.75rem * var(--mantine-scale));
1142
1142
  }
1143
1143
 
1144
- ._messageListDayDivider_1efgx_60 {
1144
+ ._messageListDayDivider_1xgoq_60 {
1145
1145
  display: flex;
1146
1146
  justify-content: center;
1147
1147
  padding-block: var(--mantine-spacing-xs);
@@ -1150,7 +1150,7 @@
1150
1150
  z-index: 1;
1151
1151
  }
1152
1152
 
1153
- ._messageListDayLabel_1efgx_69 {
1153
+ ._messageListDayLabel_1xgoq_69 {
1154
1154
  font-size: var(--mantine-font-size-xs);
1155
1155
  color: var(--mantine-color-dimmed);
1156
1156
  background-color: var(--mantine-color-body);
@@ -1159,13 +1159,13 @@
1159
1159
  box-shadow: 0 1px 0.5px rgba(0, 0, 0, 0.13);
1160
1160
  }
1161
1161
 
1162
- ._messageListLoadOlder_1efgx_78 {
1162
+ ._messageListLoadOlder_1xgoq_78 {
1163
1163
  display: flex;
1164
1164
  justify-content: center;
1165
1165
  padding-block: var(--mantine-spacing-xs);
1166
1166
  }
1167
1167
 
1168
- ._messageListState_1efgx_84 {
1168
+ ._messageListState_1xgoq_84 {
1169
1169
  display: flex;
1170
1170
  flex-direction: column;
1171
1171
  align-items: center;
@@ -1176,7 +1176,7 @@
1176
1176
  text-align: center;
1177
1177
  }
1178
1178
 
1179
- ._messageListScrollToBottom_1efgx_95 {
1179
+ ._messageListScrollToBottom_1xgoq_95 {
1180
1180
  position: absolute;
1181
1181
  inset-block-end: var(--mantine-spacing-md);
1182
1182
  inset-inline-end: var(--mantine-spacing-md);
@@ -1458,7 +1458,7 @@
1458
1458
  ._inboxRoot_1pu3o_1:where([data-narrow]) ._inboxPanel_1pu3o_39 {
1459
1459
  border-inline-start: none;
1460
1460
  }
1461
- ._modalRoot_1mb1l_1 {
1461
+ ._modalRoot_1xrov_1 {
1462
1462
  display: contents;
1463
1463
  }
1464
1464
 
@@ -1466,19 +1466,25 @@
1466
1466
  * The dialog is a column: the header keeps its own padding, and the body is the only part that
1467
1467
  * loses it so the conversation can run edge to edge.
1468
1468
  */
1469
- ._modalContent_1mb1l_9 {
1469
+ ._modalContent_1xrov_9 {
1470
1470
  display: flex;
1471
1471
  flex-direction: column;
1472
1472
  }
1473
1473
 
1474
- ._modalBody_1mb1l_14 {
1474
+ ._modalBody_1xrov_14 {
1475
1475
  display: flex;
1476
1476
  flex-direction: column;
1477
- flex: 1;
1477
+ flex: 0 1 auto;
1478
1478
  height: var(--wa-modal-height, 70vh);
1479
1479
  min-height: 0;
1480
+ overflow: hidden;
1480
1481
  padding: 0;
1481
1482
  }
1483
+
1484
+ ._modalRoot_1xrov_1:where([data-full-screen]) ._modalBody_1xrov_14 {
1485
+ flex: 1 1 0;
1486
+ height: auto;
1487
+ }
1482
1488
  ._drawerRoot_1qheq_1 {
1483
1489
  display: contents;
1484
1490
  }