@visns-studio/visns-components 6.17.2 → 6.20.1

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 (83) hide show
  1. package/package.json +10 -7
  2. package/src/components/AssociationManager.jsx +344 -177
  3. package/src/components/AsyncSelect.jsx +2 -2
  4. package/src/components/Autocomplete.jsx +57 -12
  5. package/src/components/Breadcrumb.jsx +23 -4
  6. package/src/components/ClientAssociationManager.jsx +321 -145
  7. package/src/components/DataGrid.jsx +625 -20
  8. package/src/components/DropZone.jsx +4 -1
  9. package/src/components/Form.jsx +233 -6
  10. package/src/components/MultiSelect.jsx +2 -2
  11. package/src/components/Navigation.jsx +39 -23
  12. package/src/components/TableFilter.jsx +172 -12
  13. package/src/components/UniversalSearch.jsx +390 -0
  14. package/src/components/auth/Login.jsx +164 -8
  15. package/src/components/auth/Profile.jsx +209 -22
  16. package/src/components/auth/authEndpoints.js +4 -0
  17. package/src/components/auth/webauthn.js +194 -0
  18. package/src/components/columns/ColumnRenderers.jsx +6 -1
  19. package/src/components/controls/DataGridSearch.jsx +11 -5
  20. package/src/components/generic/GenericAuth.jsx +6 -0
  21. package/src/components/generic/GenericDashboard.jsx +93 -36
  22. package/src/components/generic/GenericDetail.jsx +146 -61
  23. package/src/components/generic/GenericIndex.jsx +142 -38
  24. package/src/components/generic/GenericSettings.jsx +220 -0
  25. package/src/components/generic/StandardModal.jsx +165 -8
  26. package/src/components/generic/dashboardChartDefaults.js +230 -0
  27. package/src/components/generic/shared/indexLayout.js +38 -0
  28. package/src/components/settings/IntegrationsManager.jsx +474 -0
  29. package/src/components/sms/SmsLineSettings.jsx +16 -12
  30. package/src/components/styles/AssociationManager.module.scss +4 -363
  31. package/src/components/styles/AuditLog.module.scss +6 -6
  32. package/src/components/styles/AuditLogs.module.scss +3 -3
  33. package/src/components/styles/Autocomplete.module.scss +7 -7
  34. package/src/components/styles/BusinessCardOcr.module.scss +6 -1
  35. package/src/components/styles/CallQueueSettings.module.scss +4 -1
  36. package/src/components/styles/CameraPlacement.module.scss +19 -19
  37. package/src/components/styles/CategorizedDropZone.module.scss +6 -1
  38. package/src/components/styles/ClientAssociationManager.module.scss +5 -289
  39. package/src/components/styles/ClientAuth.module.scss +1 -1
  40. package/src/components/styles/DataGrid.module.scss +455 -8
  41. package/src/components/styles/Field.module.scss +32 -24
  42. package/src/components/styles/Form.module.scss +123 -3
  43. package/src/components/styles/GenericDashboard.module.scss +612 -825
  44. package/src/components/styles/GenericDetail.module.scss +406 -61
  45. package/src/components/styles/GenericDynamic.module.scss +25 -25
  46. package/src/components/styles/GenericEditableTable.module.scss +33 -33
  47. package/src/components/styles/GenericFormBuilder.module.scss +119 -119
  48. package/src/components/styles/GenericIndex.module.scss +483 -38
  49. package/src/components/styles/GenericMain.module.scss +6 -3
  50. package/src/components/styles/GenericQuote.module.scss +399 -81
  51. package/src/components/styles/GenericReport.module.scss +8 -8
  52. package/src/components/styles/GenericSettings.module.scss +209 -0
  53. package/src/components/styles/GenericSort.module.scss +9 -9
  54. package/src/components/styles/Integrations.module.scss +321 -0
  55. package/src/components/styles/List.module.scss +4 -4
  56. package/src/components/styles/Login.module.scss +57 -0
  57. package/src/components/styles/MultiSelect.module.scss +4 -4
  58. package/src/components/styles/Navigation.module.scss +12 -12
  59. package/src/components/styles/Notification.module.scss +12 -8
  60. package/src/components/styles/NotificationList.module.scss +5 -5
  61. package/src/components/styles/Profile.module.scss +5 -5
  62. package/src/components/styles/QrCode.module.scss +4 -4
  63. package/src/components/styles/QuickAction.module.scss +20 -20
  64. package/src/components/styles/SortableQuoteItems.module.scss +4 -4
  65. package/src/components/styles/TableFilter.module.scss +128 -17
  66. package/src/components/styles/TicketConversation.module.scss +497 -0
  67. package/src/components/styles/UniversalSearch.module.scss +229 -0
  68. package/src/components/styles/Vault.module.scss +413 -0
  69. package/src/components/styles/_associationManager.scss +467 -0
  70. package/src/components/styles/_authBrandPanel.scss +15 -9
  71. package/src/components/styles/_controls.scss +43 -39
  72. package/src/components/styles/global-datagrid.css +196 -0
  73. package/src/components/styles/global.css +168 -17
  74. package/src/components/tickets/TicketConversation.jsx +455 -0
  75. package/src/components/utils/rowActionSettings.js +117 -0
  76. package/src/components/vault/VaultClientPicker.jsx +183 -0
  77. package/src/components/vault/VaultEntryForm.jsx +23 -0
  78. package/src/components/vault/VaultManager.jsx +382 -34
  79. package/src/components/vault/VaultShareModal.jsx +454 -0
  80. package/src/components/vault/vaultEndpoints.js +16 -2
  81. package/src/components/vault/vaultShares.js +247 -0
  82. package/src/index.js +35 -0
  83. package/src/utils/fetchUtil.js +38 -14
@@ -51,7 +51,7 @@
51
51
  left: 0;
52
52
  padding: 19px 13px;
53
53
  border-radius: var(--radius);
54
- border: 1px solid rgba(var(--paragraph-rgb), 0.15);
54
+ border: 1px solid rgba(var(--paragraph-rgb, 43, 43, 43), 0.15);
55
55
  box-shadow: none;
56
56
  }
57
57
 
@@ -173,7 +173,41 @@ select {
173
173
  box-sizing: border-box;
174
174
 
175
175
  > span {
176
- color: rgba(255, 77, 77, 1.4);
176
+ color: rgba(255, 77, 77, 1);
177
+ }
178
+ }
179
+
180
+ /*
181
+ * Native date/time inputs. WebKit lays the value out in an internal
182
+ * ::-webkit-datetime-edit box pinned to the input's TOP, so any height the
183
+ * input gains beyond its own line box — padding rules sized against the text
184
+ * inputs beside it — becomes empty space UNDER the value: the dd/mm/yyyy
185
+ * text and the calendar glyph ride high while every neighbouring field
186
+ * centres. Flexing the input and centring the inner box fixes Chrome and
187
+ * iOS Safari both; Firefox centres already and ignores the vendor parts.
188
+ */
189
+ input[type='date'],
190
+ input[type='time'],
191
+ input[type='month'],
192
+ input[type='week'],
193
+ input[type='datetime-local'] {
194
+ display: inline-flex;
195
+ align-items: center;
196
+
197
+ &::-webkit-datetime-edit {
198
+ display: flex;
199
+ align-items: center;
200
+ padding: 0;
201
+ }
202
+
203
+ &::-webkit-date-and-time-value {
204
+ /* iOS Safari gives the value a top margin inside the flexed input. */
205
+ margin: 0;
206
+ text-align: left;
207
+ }
208
+
209
+ &::-webkit-calendar-picker-indicator {
210
+ margin-block: 0;
177
211
  }
178
212
  }
179
213
 
@@ -312,7 +346,7 @@ input[type='file'] {
312
346
 
313
347
  .btn {
314
348
  background: var(--primary-color);
315
- border: 1px solid rgb(var(--primary-rgb), 1.05);
349
+ border: 1px solid rgb(var(--primary-rgb, 27, 57, 51), 1);
316
350
  width: 100%;
317
351
  padding: 0.75rem;
318
352
  border-radius: var(--br);
@@ -473,3 +507,89 @@ input[type='file'] {
473
507
  min-width: 200px;
474
508
  }
475
509
  }
510
+
511
+ /* ============================================================================
512
+ * 2026 pass — the form's action bar
513
+ * ----------------------------------------------------------------------------
514
+ * It was a centred row whose primary button rendered full-bleed across the
515
+ * form, sitting inside the scroll area with no Cancel next to it. Three things
516
+ * wrong with that, in order of how much they cost:
517
+ *
518
+ * 1. It scrolls away. On a form longer than the panel, the only way to save
519
+ * is to scroll to the bottom first — and the taller the form, the more
520
+ * likely the user has already lost track of whether it saved.
521
+ * 2. A full-width primary is a phone pattern. On a 560px sheet it reads as a
522
+ * banner, and it gives "Save" the same visual weight as the whole form.
523
+ * 3. There was no Cancel. The only way out was the X in the corner or the
524
+ * Escape key, neither of which is where anyone looks for it.
525
+ *
526
+ * Right-aligned with the primary last, which is the desktop convention and
527
+ * puts the confirming action nearest the thumb on the scrollbar side.
528
+ * ==========================================================================*/
529
+
530
+ .buttonContainer {
531
+ position: sticky;
532
+ bottom: 0;
533
+ z-index: 2;
534
+
535
+ display: flex;
536
+ /* Primary last, on the right. */
537
+ justify-content: flex-end;
538
+ gap: 0.5rem;
539
+
540
+ /* Full bleed to the panel edges, so the bar reads as chrome rather than as
541
+ another form row floating inside the content. */
542
+ margin: 1.25rem -1rem -1rem;
543
+ padding: 0.75rem 1rem;
544
+ border-top: 1px solid var(--border-color, rgba(43, 43, 43, 0.12));
545
+ background: var(--background-color, #fff);
546
+
547
+ /* `.buttonContainer .btn` rather than `.buttonContainer button`, because
548
+ `.modal__content .btn` (0,2,0) sets `width: 100%` and beats a
549
+ class-plus-element selector (0,1,1). That `width: 100%` is why the
550
+ primary rendered 496px wide — exactly the content box of this bar —
551
+ while Cancel sat at its natural 76px beside it. */
552
+ .btn,
553
+ .btnSecondary {
554
+ /* Was `min-width: 200px`, which is what made a two-button row overflow
555
+ a narrow sheet and a one-button row look like a banner. */
556
+ flex: 0 0 auto;
557
+ min-width: auto;
558
+ width: auto;
559
+ padding: 0 1.1rem;
560
+ }
561
+ }
562
+
563
+ /* The quiet half of the pair. Present but not competing: a Cancel that looks
564
+ like a second primary makes the user read both before acting. */
565
+ .btnSecondary {
566
+ display: inline-flex;
567
+ align-items: center;
568
+ justify-content: center;
569
+ min-height: var(--control-height, 2.5rem);
570
+ padding: 0 1.1rem;
571
+ border: 1px solid var(--border-color, rgba(43, 43, 43, 0.16));
572
+ border-radius: var(--btn-br, var(--radius-sm, 6px));
573
+ background: transparent;
574
+ color: var(--paragraph-color, #2b2b2b);
575
+ font-family: inherit;
576
+ font-size: var(--font-size-sm, 0.8125rem);
577
+ font-weight: var(--font-weight-semibold, 600);
578
+ line-height: 1;
579
+ white-space: nowrap;
580
+ cursor: pointer;
581
+ transition:
582
+ background-color var(--speed, 160ms) var(--ease, ease),
583
+ border-color var(--speed, 160ms) var(--ease, ease);
584
+
585
+ &:hover {
586
+ background: var(--hover-color, rgba(27, 57, 51, 0.06));
587
+ border-color: var(--border-color-dark, rgba(43, 43, 43, 0.3));
588
+ }
589
+
590
+ &:focus-visible {
591
+ outline: none;
592
+ box-shadow: 0 0 0 3px
593
+ color-mix(in srgb, var(--highlight-color, #3cbf7d) 30%, transparent);
594
+ }
595
+ }