@visns-studio/visns-components 6.21.0 → 6.23.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.
- package/package.json +1 -1
- package/src/components/DataGrid.jsx +15 -2
- package/src/components/JsonView.jsx +299 -0
- package/src/components/Navigation.jsx +10 -1
- package/src/components/columns/SelectFilterEditor.jsx +372 -0
- package/src/components/controls/DataGridSearch.jsx +6 -1
- package/src/components/phone/ZoomPhoneBadge.jsx +625 -0
- package/src/components/phone/phonePresenceEndpoints.js +34 -0
- package/src/components/phone/phonePresenceHelpers.js +298 -0
- package/src/components/phone/useZoomPhoneLive.js +165 -0
- package/src/components/sms/SmsClientConversations.jsx +8 -0
- package/src/components/sms/SmsInbox.jsx +11 -0
- package/src/components/sms/SmsThreadPanel.jsx +258 -29
- package/src/components/sms/smsHelpers.js +37 -0
- package/src/components/styles/DataGrid.module.scss +10 -0
- package/src/components/styles/GenericDetail.module.scss +12 -2
- package/src/components/styles/JsonView.module.scss +233 -0
- package/src/components/styles/Sms.module.scss +131 -0
- package/src/components/styles/Vault.module.scss +114 -0
- package/src/components/styles/ZoomPhone.module.scss +550 -0
- package/src/components/styles/global-datagrid.css +23 -0
- package/src/components/vault/VaultAccessLog.jsx +24 -0
- package/src/components/vault/VaultEntryForm.jsx +239 -8
- package/src/components/vault/VaultManager.jsx +14 -2
- package/src/components/vault/VaultShareModal.jsx +126 -5
- package/src/components/vault/vaultShares.js +67 -3
- package/src/index.js +49 -2
|
@@ -234,6 +234,15 @@ $sms-mono: 'SFMono-Regular', 'Menlo', 'Consolas', monospace;
|
|
|
234
234
|
}
|
|
235
235
|
}
|
|
236
236
|
|
|
237
|
+
// A ghost button that is currently ON — the Select toggle while the timeline is
|
|
238
|
+
// in picking mode. Tinted rather than filled: it is a mode, not the pane's
|
|
239
|
+
// primary action.
|
|
240
|
+
.ghostButtonOn {
|
|
241
|
+
border-color: var(--s-primary);
|
|
242
|
+
background: var(--s-tint);
|
|
243
|
+
color: var(--s-primary);
|
|
244
|
+
}
|
|
245
|
+
|
|
237
246
|
.iconButton {
|
|
238
247
|
@include sms-reset;
|
|
239
248
|
@include sms-focus;
|
|
@@ -1521,6 +1530,101 @@ $sms-mono: 'SFMono-Regular', 'Menlo', 'Consolas', monospace;
|
|
|
1521
1530
|
font-weight: 600;
|
|
1522
1531
|
}
|
|
1523
1532
|
|
|
1533
|
+
// --------------------------------------------------- picking and annotations
|
|
1534
|
+
//
|
|
1535
|
+
// Both are off unless the host asked for them: `.pickRow` only ever wraps a
|
|
1536
|
+
// bubble while the panel is in Select mode, and `.annotations` renders only
|
|
1537
|
+
// where the host supplied chips.
|
|
1538
|
+
|
|
1539
|
+
// The whole row is the hit target while picking. The checkbox sits on the
|
|
1540
|
+
// bubble's own side of the pane so the ticks line up down one margin rather
|
|
1541
|
+
// than zig-zagging with the conversation.
|
|
1542
|
+
.pickRow {
|
|
1543
|
+
display: flex;
|
|
1544
|
+
gap: 0.5rem;
|
|
1545
|
+
align-items: center;
|
|
1546
|
+
max-width: 100%;
|
|
1547
|
+
padding: 0.15rem 0.25rem;
|
|
1548
|
+
border: 1px solid transparent;
|
|
1549
|
+
border-radius: 14px;
|
|
1550
|
+
cursor: pointer;
|
|
1551
|
+
|
|
1552
|
+
&:hover {
|
|
1553
|
+
background: var(--s-hover);
|
|
1554
|
+
}
|
|
1555
|
+
}
|
|
1556
|
+
|
|
1557
|
+
.bubbleOut .pickRow {
|
|
1558
|
+
flex-direction: row-reverse;
|
|
1559
|
+
}
|
|
1560
|
+
|
|
1561
|
+
.pickRowOn {
|
|
1562
|
+
border-color: color-mix(in srgb, var(--s-primary) 45%, transparent);
|
|
1563
|
+
background: var(--s-tint);
|
|
1564
|
+
}
|
|
1565
|
+
|
|
1566
|
+
// A message that has not reached the server yet — nothing to file it against.
|
|
1567
|
+
.pickRowOff {
|
|
1568
|
+
opacity: 0.5;
|
|
1569
|
+
cursor: default;
|
|
1570
|
+
|
|
1571
|
+
&:hover {
|
|
1572
|
+
background: none;
|
|
1573
|
+
}
|
|
1574
|
+
}
|
|
1575
|
+
|
|
1576
|
+
.pickBox {
|
|
1577
|
+
flex-shrink: 0;
|
|
1578
|
+
width: 15px;
|
|
1579
|
+
height: 15px;
|
|
1580
|
+
margin: 0;
|
|
1581
|
+
accent-color: var(--s-primary);
|
|
1582
|
+
cursor: inherit;
|
|
1583
|
+
}
|
|
1584
|
+
|
|
1585
|
+
// Host-supplied chips under a bubble, on the bubble's own side.
|
|
1586
|
+
.annotations {
|
|
1587
|
+
display: flex;
|
|
1588
|
+
flex-wrap: wrap;
|
|
1589
|
+
gap: 0.25rem;
|
|
1590
|
+
max-width: min(60ch, 64%);
|
|
1591
|
+
margin-top: 0.25rem;
|
|
1592
|
+
padding: 0 0.25rem;
|
|
1593
|
+
}
|
|
1594
|
+
|
|
1595
|
+
.bubbleOut .annotations {
|
|
1596
|
+
justify-content: flex-end;
|
|
1597
|
+
}
|
|
1598
|
+
|
|
1599
|
+
.annotation {
|
|
1600
|
+
@include sms-reset;
|
|
1601
|
+
|
|
1602
|
+
display: inline-flex;
|
|
1603
|
+
gap: 0.25rem;
|
|
1604
|
+
align-items: center;
|
|
1605
|
+
max-width: 100%;
|
|
1606
|
+
padding: 0.1rem 0.5rem;
|
|
1607
|
+
border: 1px solid color-mix(in srgb, var(--s-primary) 30%, transparent);
|
|
1608
|
+
border-radius: 999px;
|
|
1609
|
+
background: var(--s-tint);
|
|
1610
|
+
color: var(--s-primary);
|
|
1611
|
+
font-size: 0.7rem;
|
|
1612
|
+
font-weight: 600;
|
|
1613
|
+
text-align: left;
|
|
1614
|
+
overflow-wrap: anywhere;
|
|
1615
|
+
}
|
|
1616
|
+
|
|
1617
|
+
.annotationAction {
|
|
1618
|
+
@include sms-focus;
|
|
1619
|
+
|
|
1620
|
+
cursor: pointer;
|
|
1621
|
+
|
|
1622
|
+
&:hover {
|
|
1623
|
+
border-color: var(--s-primary);
|
|
1624
|
+
background: color-mix(in srgb, var(--s-primary) 16%, var(--s-background));
|
|
1625
|
+
}
|
|
1626
|
+
}
|
|
1627
|
+
|
|
1524
1628
|
.retryButton {
|
|
1525
1629
|
@include sms-reset;
|
|
1526
1630
|
@include sms-focus;
|
|
@@ -1599,6 +1703,33 @@ $sms-mono: 'SFMono-Regular', 'Menlo', 'Consolas', monospace;
|
|
|
1599
1703
|
background: var(--s-surface);
|
|
1600
1704
|
}
|
|
1601
1705
|
|
|
1706
|
+
// Stands exactly where the composer does while the timeline is being picked
|
|
1707
|
+
// over, so the pane keeps its height and its one footer.
|
|
1708
|
+
.selectBar {
|
|
1709
|
+
display: flex;
|
|
1710
|
+
flex-wrap: wrap;
|
|
1711
|
+
gap: 0.5rem 0.75rem;
|
|
1712
|
+
align-items: center;
|
|
1713
|
+
justify-content: space-between;
|
|
1714
|
+
box-sizing: border-box;
|
|
1715
|
+
padding: 0.6rem 0.7rem 0.7rem;
|
|
1716
|
+
border-top: 1px solid var(--s-line);
|
|
1717
|
+
background: var(--s-surface);
|
|
1718
|
+
}
|
|
1719
|
+
|
|
1720
|
+
.selectCount {
|
|
1721
|
+
color: var(--s-paragraph);
|
|
1722
|
+
font-size: 0.8rem;
|
|
1723
|
+
font-weight: 600;
|
|
1724
|
+
}
|
|
1725
|
+
|
|
1726
|
+
.selectActions {
|
|
1727
|
+
display: inline-flex;
|
|
1728
|
+
gap: 0.5rem;
|
|
1729
|
+
align-items: center;
|
|
1730
|
+
margin-left: auto;
|
|
1731
|
+
}
|
|
1732
|
+
|
|
1602
1733
|
// One card: the text on top, every control in a bar along its bottom edge.
|
|
1603
1734
|
// Buttons beside a textarea line up with nothing once the box grows; a bar
|
|
1604
1735
|
// inside the same border always reads as part of the message being written.
|
|
@@ -41,6 +41,11 @@ $vault-mono: 'SFMono-Regular', 'Menlo', 'Consolas', monospace;
|
|
|
41
41
|
--v-tint: color-mix(in srgb, var(--v-primary) 12%, var(--v-background));
|
|
42
42
|
--v-ok: rgb(31, 122, 71);
|
|
43
43
|
--v-bad: rgb(190, 62, 62);
|
|
44
|
+
// Between the two: something did not happen, and nothing is broken or at
|
|
45
|
+
// risk because of it. Its one user is "the link could not be emailed" —
|
|
46
|
+
// the link itself is fine and on screen right above the line, so painting
|
|
47
|
+
// that in --v-bad would read as "your credential is in trouble".
|
|
48
|
+
--v-warn: rgb(176, 106, 20);
|
|
44
49
|
}
|
|
45
50
|
|
|
46
51
|
// Undo anything a host may have imposed on a generic element. Applied to every
|
|
@@ -1279,6 +1284,74 @@ input.checkControl {
|
|
|
1279
1284
|
resize: vertical;
|
|
1280
1285
|
}
|
|
1281
1286
|
|
|
1287
|
+
// ---------------------------------------------------------------------------
|
|
1288
|
+
// Notes: the Formatted / Raw toggle
|
|
1289
|
+
// ---------------------------------------------------------------------------
|
|
1290
|
+
// Notes holding a machine-written JSON backup are READ as a tree (JsonView) and
|
|
1291
|
+
// EDITED as text. Two chips rather than a switch, because a switch has to be
|
|
1292
|
+
// labelled with the state it is not in and there is no good way to word that
|
|
1293
|
+
// here; two chips name both and light the one you are looking at.
|
|
1294
|
+
|
|
1295
|
+
.viewToggle {
|
|
1296
|
+
display: inline-flex;
|
|
1297
|
+
gap: 0.25rem;
|
|
1298
|
+
align-self: flex-start;
|
|
1299
|
+
padding: 0.15rem;
|
|
1300
|
+
border: 1px solid var(--v-line);
|
|
1301
|
+
border-radius: var(--v-btn-br);
|
|
1302
|
+
background: var(--v-surface);
|
|
1303
|
+
}
|
|
1304
|
+
|
|
1305
|
+
.viewChip {
|
|
1306
|
+
@include vault-reset;
|
|
1307
|
+
@include vault-focus;
|
|
1308
|
+
|
|
1309
|
+
display: inline-flex;
|
|
1310
|
+
align-items: center;
|
|
1311
|
+
padding: 0.2rem 0.55rem;
|
|
1312
|
+
border: 1px solid transparent;
|
|
1313
|
+
border-radius: calc(var(--v-btn-br) - 1px);
|
|
1314
|
+
background: none;
|
|
1315
|
+
color: var(--v-muted);
|
|
1316
|
+
font-size: 0.72rem;
|
|
1317
|
+
font-weight: 600;
|
|
1318
|
+
letter-spacing: 0.02em;
|
|
1319
|
+
cursor: pointer;
|
|
1320
|
+
|
|
1321
|
+
&:hover:not(:disabled) {
|
|
1322
|
+
color: var(--v-primary);
|
|
1323
|
+
}
|
|
1324
|
+
|
|
1325
|
+
// Disabled here means "the JSON is broken, so there is nothing to lay
|
|
1326
|
+
// out"; the chip carries a title saying so. Dimmed rather than removed —
|
|
1327
|
+
// a control that disappears takes its own explanation with it.
|
|
1328
|
+
&:disabled {
|
|
1329
|
+
cursor: default;
|
|
1330
|
+
opacity: 0.45;
|
|
1331
|
+
}
|
|
1332
|
+
}
|
|
1333
|
+
|
|
1334
|
+
.viewChipOn {
|
|
1335
|
+
border-color: var(--v-line);
|
|
1336
|
+
background: var(--v-background);
|
|
1337
|
+
color: var(--v-primary);
|
|
1338
|
+
}
|
|
1339
|
+
|
|
1340
|
+
// The tree's container. JsonView declares no height of its own on purpose, so
|
|
1341
|
+
// the cap belongs here: 50vh keeps a 32KB backup scrolling inside the field
|
|
1342
|
+
// instead of pushing Save off the bottom of the dialog.
|
|
1343
|
+
.notesJson {
|
|
1344
|
+
@include vault-focus;
|
|
1345
|
+
|
|
1346
|
+
box-sizing: border-box;
|
|
1347
|
+
max-height: 50vh;
|
|
1348
|
+
padding: 0.5rem 0.6rem;
|
|
1349
|
+
overflow: auto;
|
|
1350
|
+
border: 1px solid var(--v-line);
|
|
1351
|
+
border-radius: var(--v-btn-br);
|
|
1352
|
+
background: var(--v-surface);
|
|
1353
|
+
}
|
|
1354
|
+
|
|
1282
1355
|
.help {
|
|
1283
1356
|
margin: 0;
|
|
1284
1357
|
color: var(--v-muted);
|
|
@@ -2312,6 +2385,47 @@ input.checkControl {
|
|
|
2312
2385
|
}
|
|
2313
2386
|
}
|
|
2314
2387
|
|
|
2388
|
+
// "Also emailed to dana@acme.example." Quiet, and under the URL rather than
|
|
2389
|
+
// instead of it: the copy-the-link flow is what actually happened, the email is
|
|
2390
|
+
// a convenience on top of it.
|
|
2391
|
+
.shareEmailed {
|
|
2392
|
+
display: flex;
|
|
2393
|
+
gap: 0.35rem;
|
|
2394
|
+
align-items: flex-start;
|
|
2395
|
+
margin: 0;
|
|
2396
|
+
color: var(--v-ok);
|
|
2397
|
+
font-size: 0.78rem;
|
|
2398
|
+
line-height: 1.45;
|
|
2399
|
+
|
|
2400
|
+
svg {
|
|
2401
|
+
flex-shrink: 0;
|
|
2402
|
+
margin-top: 0.15rem;
|
|
2403
|
+
}
|
|
2404
|
+
}
|
|
2405
|
+
|
|
2406
|
+
// The send failed. Louder than the line above, because the sender is about to
|
|
2407
|
+
// close a dialog believing the recipient has the link — but not red: the link
|
|
2408
|
+
// is on screen and copyable, and nothing about the credential is at risk.
|
|
2409
|
+
.shareEmailFailed {
|
|
2410
|
+
display: flex;
|
|
2411
|
+
gap: 0.35rem;
|
|
2412
|
+
align-items: flex-start;
|
|
2413
|
+
margin: 0;
|
|
2414
|
+
padding: 0.5rem 0.6rem;
|
|
2415
|
+
border: 1px solid color-mix(in srgb, var(--v-warn) 40%, transparent);
|
|
2416
|
+
border-radius: var(--v-btn-br);
|
|
2417
|
+
background: color-mix(in srgb, var(--v-warn) 10%, var(--v-background));
|
|
2418
|
+
color: var(--v-warn);
|
|
2419
|
+
font-size: 0.78rem;
|
|
2420
|
+
font-weight: 500;
|
|
2421
|
+
line-height: 1.45;
|
|
2422
|
+
|
|
2423
|
+
svg {
|
|
2424
|
+
flex-shrink: 0;
|
|
2425
|
+
margin-top: 0.15rem;
|
|
2426
|
+
}
|
|
2427
|
+
}
|
|
2428
|
+
|
|
2315
2429
|
.shareList {
|
|
2316
2430
|
display: flex;
|
|
2317
2431
|
flex-direction: column;
|