@visns-studio/visns-components 6.34.0 → 6.35.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.
@@ -1068,19 +1068,48 @@ $sms-mono: 'SFMono-Regular', 'Menlo', 'Consolas', monospace;
1068
1068
 
1069
1069
  .pageTitle {
1070
1070
  display: flex;
1071
- gap: 0.5rem;
1071
+ flex-wrap: wrap;
1072
+ column-gap: 0.3em;
1072
1073
  align-items: center;
1073
1074
  margin: 0;
1074
- color: var(--s-paragraph);
1075
- font-size: 1.5rem;
1075
+ /* The same title every other screen of a host CRM draws: `.crmtitle h1` in
1076
+ GenericDetail/GenericIndex and PageHeader's `.title` all read
1077
+ --page-header-title-size and the heading colour. This was 1.5rem in the
1078
+ paragraph colour, a size larger than every page around it. */
1079
+ color: var(--heading-color, var(--s-paragraph));
1080
+ font-size: var(--page-header-title-size, 1.25rem);
1076
1081
  font-weight: 700;
1077
- line-height: 1.2;
1082
+ line-height: 1.25;
1083
+ letter-spacing: -0.02em;
1078
1084
 
1079
1085
  svg {
1080
1086
  color: var(--s-primary);
1081
1087
  }
1082
1088
  }
1083
1089
 
1090
+ /* A breadcrumb inside the title — `Messages › SMS campaigns`. The library's
1091
+ trail spec (`.crmtitle h1 a` / `h1 svg` in GenericDetail.module.scss):
1092
+ the parent muted at 500, a 16px chevron, the current page at 700. */
1093
+ .pageTitleParent {
1094
+ color: var(--muted-color, var(--s-muted));
1095
+ font-weight: 500;
1096
+ text-decoration: none;
1097
+ transition: color 0.15s ease;
1098
+
1099
+ &:hover,
1100
+ &:focus-visible {
1101
+ color: var(--paragraph-color, var(--s-paragraph));
1102
+ text-decoration: underline;
1103
+ }
1104
+ }
1105
+
1106
+ .pageTitle .pageTitleChevron {
1107
+ flex: 0 0 auto;
1108
+ max-width: 15px;
1109
+ margin: 0 0.4rem;
1110
+ color: var(--muted-color, var(--s-muted));
1111
+ }
1112
+
1084
1113
  .headActions {
1085
1114
  display: flex;
1086
1115
  flex-wrap: wrap;
@@ -1746,10 +1746,12 @@ input.checkControl {
1746
1746
 
1747
1747
  .pageTitle {
1748
1748
  margin: 0;
1749
- color: var(--v-paragraph);
1750
- font-size: 1.5rem;
1749
+ /* One title size across a host CRM — see `.pageTitle` in Sms.module.scss. */
1750
+ color: var(--heading-color, var(--v-paragraph));
1751
+ font-size: var(--page-header-title-size, 1.25rem);
1751
1752
  font-weight: 700;
1752
- line-height: 1.2;
1753
+ line-height: 1.25;
1754
+ letter-spacing: -0.02em;
1753
1755
  }
1754
1756
 
1755
1757
  .pageIntro {
@@ -280,7 +280,9 @@ input[type]:not([type='search']):not([type='url']):not([type='hidden']):not(
280
280
  .react-datepicker__year-select
281
281
  ):not(.visns-native-date-filter__input):not([type='date']):not(
282
282
  [type='datetime-local']
283
- ):not([type='time']):not([class*='searchInput']):not([class*='filterInput']):not([class*='rowActionPickerSearch']) {
283
+ ):not([type='time']):not([class*='searchInput']):not([class*='filterInput']):not([class*='rowActionPickerSearch']):not(
284
+ .visns-auth-input
285
+ ) {
284
286
  background: white;
285
287
  border-radius: var(--br);
286
288
  border: 1px solid rgba(var(--paragraph-color-rgb, 43, 43, 43), 0.15);
@@ -310,6 +312,14 @@ input[type]:not([type='search']):not([type='url']):not([type='hidden']):not(
310
312
  font-size: 0.85rem;
311
313
  }
312
314
 
315
+ /* `.visns-auth-input` is the floating-label field on the auth screens (login,
316
+ reset, verify, 2FA). Its module gives it a 3.35rem box with a top-heavy
317
+ padding so the value clears the label sitting inside it, and that rule is
318
+ `.field input` — (0,1,1), which this chain outranks twenty times over. So
319
+ the chain used to win: the box shrank to `--field-height`, the padding went
320
+ horizontal-only, and the value was drawn straight through the label. The
321
+ auth inputs carry the class for exactly this opt-out. */
322
+
313
323
  /* The focus border, as its own rule and NOT nested under the list above.
314
324
 
315
325
  Nested `&:focus` is `:is(<the whole list>):focus`, and `:is()` takes the
@@ -333,7 +343,9 @@ input[type]:not([type='search']):not([type='url']):not([type='hidden']):not(
333
343
  .react-datepicker__year-select
334
344
  ):not(.visns-native-date-filter__input):not([type='date']):not(
335
345
  [type='datetime-local']
336
- ):not([type='time']):not([class*='searchInput']):not([class*='filterInput']):not([class*='rowActionPickerSearch']):focus {
346
+ ):not([type='time']):not([class*='searchInput']):not([class*='filterInput']):not([class*='rowActionPickerSearch']):not(
347
+ .visns-auth-input
348
+ ):focus {
337
349
  border: 1px solid var(--primary-color);
338
350
  }
339
351
 
package/src/index.js CHANGED
@@ -288,6 +288,9 @@ import SmsCampaigns, {
288
288
  import SmsClientConversations from './components/sms/SmsClientConversations';
289
289
  import SmsComposeModal from './components/sms/SmsComposeModal';
290
290
  import SmsInbox from './components/sms/SmsInbox';
291
+ // Email campaigns — Resend Broadcasts, the screen for visns-packages'
292
+ // `email_campaigns` module. Mount it at a route and pass `canManage`.
293
+ import EmailCampaigns from './components/emailCampaigns/EmailCampaigns';
291
294
  import SmsInboxBadge from './components/sms/SmsInboxBadge';
292
295
  import SmsLineSettings from './components/sms/SmsLineSettings';
293
296
  import SmsThreadPanel from './components/sms/SmsThreadPanel';
@@ -528,6 +531,7 @@ export {
528
531
  SmsClientConversations,
529
532
  SmsComposeModal,
530
533
  SmsInbox,
534
+ EmailCampaigns,
531
535
  SmsInboxBadge,
532
536
  SmsLineSettings,
533
537
  SmsThreadPanel,