@visns-studio/visns-components 6.6.3 → 6.15.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.
Files changed (100) hide show
  1. package/README.md +1658 -18
  2. package/package.json +10 -4
  3. package/src/components/DataGrid.jsx +619 -158
  4. package/src/components/Fetch.jsx +80 -3
  5. package/src/components/Form.jsx +9 -0
  6. package/src/components/Navigation.jsx +109 -50
  7. package/src/components/Notification.jsx +279 -9
  8. package/src/components/TableFilter.jsx +14 -1
  9. package/src/components/auth/AuthBrandPanel.jsx +43 -0
  10. package/src/components/auth/AuthLoading.jsx +78 -0
  11. package/src/components/auth/AuthShell.jsx +59 -0
  12. package/src/components/auth/ClientAuth.jsx +161 -0
  13. package/src/components/auth/ClientAuthFrame.jsx +59 -0
  14. package/src/components/auth/ClientLogin.jsx +266 -55
  15. package/src/components/auth/ClientOTPVerify.jsx +587 -115
  16. package/src/components/auth/ImpersonateGate.jsx +254 -0
  17. package/src/components/auth/Login.jsx +134 -41
  18. package/src/components/auth/LogoutScreen.jsx +112 -0
  19. package/src/components/auth/Reset.jsx +134 -77
  20. package/src/components/auth/TwoFactorAuth.jsx +475 -297
  21. package/src/components/auth/Verify.jsx +237 -126
  22. package/src/components/auth/authEndpoints.js +105 -0
  23. package/src/components/auth/authFont.js +23 -0
  24. package/src/components/auth/authHelpers.js +465 -0
  25. package/src/components/auth/clientAuthProtocols.js +240 -0
  26. package/src/components/auth/useOptionalRouter.js +49 -0
  27. package/src/components/callQueue/CallQueuePop.jsx +1502 -0
  28. package/src/components/callQueue/CallQueueSettings.jsx +508 -0
  29. package/src/components/callQueue/callQueueHelpers.js +280 -0
  30. package/src/components/callQueue/callQueueSettingsHelpers.js +75 -0
  31. package/src/components/columns/AutoGrowCell.jsx +141 -0
  32. package/src/components/columns/ColumnRenderers.jsx +53 -7
  33. package/src/components/generic/GenericAuth.jsx +163 -96
  34. package/src/components/generic/GenericDetail.jsx +215 -90
  35. package/src/components/generic/GenericIndex.jsx +20 -47
  36. package/src/components/generic/GenericMain.jsx +5 -0
  37. package/src/components/generic/GroupedReportRenderer.jsx +1 -5
  38. package/src/components/generic/StandardModal.jsx +17 -5
  39. package/src/components/generic/reportSemanticSteps/SemanticEntityStep.jsx +1 -6
  40. package/src/components/generic/reportSemanticSteps/SemanticFieldsStep.jsx +4 -11
  41. package/src/components/generic/reportSemanticSteps/SemanticFiltersStep.jsx +9 -27
  42. package/src/components/generic/reportSemanticSteps/SemanticGroupingStep.jsx +5 -13
  43. package/src/components/generic/reportSemanticSteps/SemanticParameterPrompt.jsx +5 -13
  44. package/src/components/generic/reportSemanticSteps/SemanticPreviewStep.jsx +14 -31
  45. package/src/components/generic/reportSemanticSteps/SemanticRelationsStep.jsx +3 -9
  46. package/src/components/generic/reportSemanticSteps/SemanticValueInput.jsx +2 -15
  47. package/src/components/navActive.js +60 -0
  48. package/src/components/notify/desktopNotifications.js +256 -0
  49. package/src/components/sketch/SketchField.jsx +12 -2
  50. package/src/components/sms/SmsComposeModal.jsx +495 -0
  51. package/src/components/sms/SmsInbox.jsx +596 -0
  52. package/src/components/sms/SmsInboxBadge.jsx +468 -0
  53. package/src/components/sms/SmsLineSettings.jsx +854 -0
  54. package/src/components/sms/SmsThreadPanel.jsx +1184 -0
  55. package/src/components/sms/smsEndpoints.js +56 -0
  56. package/src/components/sms/smsHelpers.js +1075 -0
  57. package/src/components/sms/smsLiveState.js +132 -0
  58. package/src/components/sms/useSmsLive.js +307 -0
  59. package/src/components/styles/CallQueuePop.module.scss +646 -0
  60. package/src/components/styles/CallQueueSettings.module.scss +460 -0
  61. package/src/components/styles/ClientAuth.module.scss +229 -0
  62. package/src/components/styles/DataGrid.module.scss +10 -0
  63. package/src/components/styles/GenericDetail.module.scss +153 -26
  64. package/src/components/styles/GenericIndex.module.scss +13 -0
  65. package/src/components/styles/GenericMain.module.scss +19 -2
  66. package/src/components/styles/ImpersonateGate.module.scss +85 -0
  67. package/src/components/styles/Login.module.scss +13 -122
  68. package/src/components/styles/LogoutScreen.module.scss +89 -0
  69. package/src/components/styles/Navigation.module.scss +509 -223
  70. package/src/components/styles/Notification.module.scss +103 -0
  71. package/src/components/styles/Reset.module.scss +52 -186
  72. package/src/components/styles/Sms.module.scss +2382 -0
  73. package/src/components/styles/TableFilter.module.scss +118 -98
  74. package/src/components/styles/TwoFactorAuth.module.scss +115 -176
  75. package/src/components/styles/Vault.module.scss +1983 -0
  76. package/src/components/styles/Verify.module.scss +57 -180
  77. package/src/components/styles/_authBrandPanel.scss +163 -0
  78. package/src/components/styles/_authShell.scss +369 -0
  79. package/src/components/styles/global-datagrid.css +29 -0
  80. package/src/components/utils/buildEnv.js +67 -0
  81. package/src/components/utils/displayValue.js +94 -0
  82. package/src/components/utils/useDensity.js +345 -9
  83. package/src/components/vault/OtpChip.jsx +208 -0
  84. package/src/components/vault/PasswordGenerator.jsx +145 -0
  85. package/src/components/vault/QrScanner.jsx +326 -0
  86. package/src/components/vault/VaultAccessLog.jsx +225 -0
  87. package/src/components/vault/VaultConfirmPanel.jsx +113 -0
  88. package/src/components/vault/VaultEntryForm.jsx +740 -0
  89. package/src/components/vault/VaultManager.jsx +1000 -0
  90. package/src/components/vault/VaultQuickSearch.jsx +681 -0
  91. package/src/components/vault/qrDecode.js +257 -0
  92. package/src/components/vault/useDebouncedValue.js +22 -0
  93. package/src/components/vault/useVaultReveal.js +160 -0
  94. package/src/components/vault/vaultClipboard.js +33 -0
  95. package/src/components/vault/vaultEndpoints.js +40 -0
  96. package/src/components/vault/vaultFit.js +116 -0
  97. package/src/components/vault/vaultHelpers.js +547 -0
  98. package/src/components/vault/vaultNavigation.jsx +58 -0
  99. package/src/components/vault/vaultOtp.js +105 -0
  100. package/src/index.js +233 -1
@@ -531,3 +531,106 @@
531
531
  }
532
532
  }
533
533
  }
534
+
535
+ /* Desktop alerts — the switch at the foot of the dropdown.
536
+ The switch geometry deliberately matches the one in the messages composer
537
+ (Sms.module.scss `.toggle`), copied rather than imported so the two
538
+ stylesheets stay independent of one another. */
539
+ .alertsRow {
540
+ display: flex;
541
+ align-items: center;
542
+ justify-content: space-between;
543
+ gap: 8px;
544
+ padding: 8px 16px;
545
+ border-top: 1px solid rgba(0, 0, 0, 0.06);
546
+ background-color: rgba(0, 0, 0, 0.02);
547
+ }
548
+
549
+ .alertsLabel {
550
+ display: inline-flex;
551
+ align-items: center;
552
+ gap: 6px;
553
+ color: var(--paragraph-color, #333);
554
+ font-size: 12px;
555
+ font-weight: 600;
556
+ white-space: nowrap;
557
+ }
558
+
559
+ .alertsBlocked {
560
+ color: #8a8f98;
561
+ font-size: 11px;
562
+ font-style: italic;
563
+ text-align: right;
564
+ }
565
+
566
+ .toggle {
567
+ display: inline-flex;
568
+ flex-shrink: 0;
569
+ align-items: center;
570
+ gap: 6px;
571
+ margin: 0;
572
+ padding: 3px 8px 3px 5px;
573
+ border: 1px solid rgba(0, 0, 0, 0.12);
574
+ border-radius: 999px;
575
+ background: #fff;
576
+ color: #6c757d;
577
+ font-family: inherit;
578
+ font-size: 11px;
579
+ font-weight: 600;
580
+ line-height: 1;
581
+ white-space: nowrap;
582
+ cursor: pointer;
583
+ transition: border-color 0.15s ease, color 0.15s ease;
584
+ }
585
+
586
+ .toggle:hover {
587
+ border-color: var(--primary-color, #0056b3);
588
+ color: var(--primary-color, #0056b3);
589
+ }
590
+
591
+ .toggle:focus-visible {
592
+ outline: none;
593
+ box-shadow: 0 0 0 2px rgba(var(--primary-color-rgb, 0, 86, 179), 0.3);
594
+ }
595
+
596
+ .toggleTrack {
597
+ position: relative;
598
+ display: inline-block;
599
+ flex: 0 0 auto;
600
+ width: 22px;
601
+ height: 12px;
602
+ border-radius: 999px;
603
+ background: rgba(0, 0, 0, 0.28);
604
+ transition: background-color 0.15s ease;
605
+ }
606
+
607
+ .toggleKnob {
608
+ position: absolute;
609
+ top: 1px;
610
+ left: 1px;
611
+ width: 10px;
612
+ height: 10px;
613
+ border-radius: 50%;
614
+ background: #fff;
615
+ transition: transform 0.15s ease;
616
+ }
617
+
618
+ .toggleOn {
619
+ border-color: var(--primary-color, #0056b3);
620
+ color: var(--primary-color, #0056b3);
621
+ }
622
+
623
+ .toggleOn .toggleTrack {
624
+ background: var(--primary-color, #0056b3);
625
+ }
626
+
627
+ .toggleOn .toggleKnob {
628
+ transform: translateX(10px);
629
+ }
630
+
631
+ @media (prefers-reduced-motion: reduce) {
632
+ .toggleTrack,
633
+ .toggleKnob {
634
+ transition: none;
635
+ }
636
+ }
@@ -1,199 +1,65 @@
1
- .formItem {
2
- width: 100%;
3
- position: relative;
4
- box-sizing: border-box;
5
- margin-bottom: 1rem;
6
-
7
- h1 {
8
- text-align: center;
9
- font-size: 1.5rem;
10
- font-weight: 600;
11
- color: #111827;
12
- margin-bottom: 1.5rem;
13
- }
14
-
15
- .fi__label {
16
- position: relative;
17
- display: flex;
18
- align-items: center;
19
- }
20
-
21
- .fi__span {
22
- position: absolute;
23
- transition: all 200ms;
24
- opacity: 0.7;
25
- left: 0;
26
- transform-origin: top left;
27
- cursor: text;
28
- padding: 0 1rem;
29
- font-size: 0.9rem;
30
- color: #6b7280;
31
- }
32
-
33
- .fi__div {
34
- transition: all 200ms;
35
- opacity: 0.8;
36
- left: 0;
37
- padding: 19px 13px;
38
- border-radius: 0.5rem;
39
- border: 1px solid #e5e7eb;
40
- box-shadow: none;
41
- }
42
-
43
- .fi__toggle {
44
- width: max-content;
45
- padding: 0 10px 0 0;
46
- box-sizing: border-box;
47
- display: inline;
48
- }
49
-
50
- .fi__toggletxt {
51
- position: relative;
52
- left: 5px;
53
- font-size: 0.95em;
54
- top: -5px;
55
- }
56
- }
57
-
58
- .fwItem,
59
- .fwBuilderItem {
60
- grid-column: 1 / -1;
61
- width: 100%;
62
- }
63
-
64
- .lastItem {
65
- .btn {
66
- width: 100%;
67
- }
68
- }
69
-
70
- .loginlogo {
71
- display: block;
72
- width: 100%;
73
- max-width: 150px;
74
- height: auto;
75
- margin: 0 auto;
76
- padding-bottom: 1.5rem;
77
- }
78
-
79
- .logincontainer {
80
- width: 100%;
81
- min-height: 100vh;
82
- display: grid;
83
- place-items: center;
84
- padding: 1rem;
85
- background-color: #f9fafb;
86
- }
87
-
88
- .login {
89
- width: 28rem;
90
- padding: 2rem;
91
- margin: 0;
92
- display: grid;
93
- grid-template-columns: 1fr;
94
- gap: 1rem;
95
- background-color: white;
96
- border-radius: 0.75rem;
97
- box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1),
98
- 0 2px 4px -1px rgba(0, 0, 0, 0.06);
99
-
100
- > .formItem {
101
- padding: 0;
102
-
103
- small {
104
- position: absolute;
105
- width: 18px;
106
- height: 18px;
107
- right: 14px;
108
- top: 14px;
109
- opacity: 0.4;
110
- color: #6b7280;
111
- }
112
- }
113
-
114
- > .loginitem {
115
- grid-column: 1 / -1;
116
- padding: 0.25em 0;
117
-
118
- label {
119
- width: 100%;
120
- }
121
-
122
- button {
123
- width: 100%;
124
- }
1
+ /**
2
+ * Forgot password.
3
+ *
4
+ * Replaces the pre-6.1 centred card with the two-pane sign-in language, so the
5
+ * screen a user reaches from the login form's "Forgot password?" link looks
6
+ * like the screen they came from.
7
+ *
8
+ * Everything shared comes from _authShell.scss; only the back link and the
9
+ * post-submit confirmation are particular to this screen.
10
+ */
11
+
12
+ @use './authShell' as *;
13
+
14
+ @include auth-shell;
15
+
16
+ /* Shown in place of the form once the request is in: a reset email either
17
+ exists or it does not, and re-offering the same field invites people to
18
+ submit it again while the first one is still arriving. */
19
+ .sent {
20
+ display: flex;
21
+ gap: 0.75rem;
22
+ align-items: flex-start;
23
+ padding: 1rem 1.1rem;
24
+ border: 1px solid var(--line);
25
+ border-left: 3px solid var(--navy);
26
+ border-radius: 0.6rem;
27
+ background: var(--warm);
28
+ font-size: 0.9rem;
29
+ line-height: 1.55;
30
+ color: var(--ink);
31
+
32
+ svg {
33
+ flex: none;
34
+ margin-top: 0.15rem;
35
+ color: var(--navy);
125
36
  }
126
- }
127
-
128
- .forgotten span {
129
- display: block;
130
- text-align: center;
131
- color: var(--paragraph-color);
132
- padding: 1rem 0;
133
37
 
134
- a {
135
- color: var(--secondary-color);
136
- text-decoration: none;
38
+ p {
39
+ margin: 0;
137
40
  }
138
41
  }
139
42
 
140
- .lcontainer {
141
- min-height: 100vh;
142
- display: flex;
43
+ .back {
44
+ display: inline-flex;
143
45
  align-items: center;
144
- justify-content: center;
145
- background-color: #f9fafb;
146
- }
147
-
148
- .lwrap {
149
- display: grid;
150
- grid-template-columns: 1fr;
151
- }
152
-
153
- .aside {
154
- opacity: 1;
155
- position: fixed;
156
- overflow: hidden;
157
- height: 101%;
158
- width: var(--sidebar-width);
159
- }
160
-
161
- .btn {
162
- width: max-content;
163
- display: inline-block;
164
- position: relative;
165
- padding: 0.75rem 1rem;
166
- cursor: pointer;
167
- font-size: 0.875rem;
168
- font-weight: 500;
169
- color: white;
46
+ gap: 0.35rem;
47
+ margin-top: 1.4rem;
48
+ padding: 0;
49
+ border: none;
50
+ background: none;
51
+ font-family: inherit;
52
+ font-size: 0.85rem;
53
+ font-weight: 600;
54
+ color: var(--navy);
170
55
  text-decoration: none;
171
- overflow: hidden;
172
- background: var(--primary-color, #4f46e5);
173
- border: 1px solid var(--primary-color, #4f46e5);
174
- border-radius: 0.5rem;
175
- outline: none;
176
- transition: all 0.2s ease;
177
- box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
56
+ cursor: pointer;
178
57
 
179
58
  &:hover {
180
- background: var(--secondary-color, #3cbf7d);
181
- border-color: var(--secondary-color, #3cbf7d);
59
+ text-decoration: underline;
182
60
  }
183
61
 
184
- &:focus {
185
- box-shadow: 0 0 0 2px rgba(var(--primary-rgb), 0.25);
62
+ svg {
63
+ flex: none;
186
64
  }
187
65
  }
188
-
189
- input:not(:placeholder-shown) + .fi__span,
190
- textarea:not(:placeholder-shown) + .fi__span,
191
- select:not(:placeholder-shown) + .fi__span {
192
- transform: translateY(-135%) translateX(10px) scale(0.85);
193
- opacity: 1;
194
- padding: 0;
195
- background: white;
196
- font-weight: 500;
197
- transition: all 0.3s ease;
198
- color: var(--primary-color, #4f46e5) !important;
199
- }