privateboard 0.1.9 → 0.1.10

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "privateboard",
3
- "version": "0.1.9",
3
+ "version": "0.1.10",
4
4
  "description": "PrivateBoard · your private board meeting, on call. Local-first, multi-agent thinking amplifier.",
5
5
  "type": "module",
6
6
  "bin": {
package/public/app.js CHANGED
@@ -3799,7 +3799,6 @@
3799
3799
  <div class="row-content">
3800
3800
  <div class="row-top-line">
3801
3801
  <span class="row-title">${this.escape(fullTitle)}</span>
3802
- <span class="row-time">${this.escape(time)}</span>
3803
3802
  </div>
3804
3803
  <div class="row-subtitle">${status}${this.escape(r.subject || "")}</div>
3805
3804
  </div>
@@ -3981,7 +3980,6 @@
3981
3980
  <div class="agent-row-content">
3982
3981
  <div class="agent-row-top-line">
3983
3982
  <span class="agent-row-title">${this.escape(a.name)}</span>
3984
- <span class="agent-row-time">${this.escape(time)}</span>
3985
3983
  ${pinBtn}
3986
3984
  </div>
3987
3985
  <div class="agent-row-subtitle">
@@ -5050,11 +5048,16 @@
5050
5048
  }
5051
5049
 
5052
5050
  // Scroll path · IntersectionObserver fires when the sentinel
5053
- // crosses the viewport. `rootMargin: 200px` triggers slightly
5054
- // before the actual edge so the next batch is rendered before
5055
- // the user reaches the bottom feels seamless rather than
5056
- // chunked.
5051
+ // crosses the viewport. The All Reports view uses an inner
5052
+ // scroll container (`.main-view[data-main-view="reports"]` has
5053
+ // `overflow-y: auto`), so the document viewport itself never
5054
+ // scrolls. The observer's `root` MUST point at the inner
5055
+ // scroller — otherwise the sentinel never intersects and
5056
+ // infinite scroll silently does nothing. `rootMargin: 200px`
5057
+ // triggers slightly before the actual edge so the next batch
5058
+ // is rendered before the user reaches the bottom.
5057
5059
  try {
5060
+ const scrollRoot = document.querySelector('.main-view[data-main-view="reports"]') || null;
5058
5061
  this._reportsLoadObserver = new IntersectionObserver(
5059
5062
  (entries) => {
5060
5063
  for (const entry of entries) {
@@ -5064,7 +5067,7 @@
5064
5067
  }
5065
5068
  }
5066
5069
  },
5067
- { rootMargin: "200px 0px 200px 0px", threshold: 0.01 },
5070
+ { root: scrollRoot, rootMargin: "200px 0px 200px 0px", threshold: 0.01 },
5068
5071
  );
5069
5072
  this._reportsLoadObserver.observe(sentinel);
5070
5073
  } catch { /* IntersectionObserver unavailable · click path remains */ }
package/public/index.html CHANGED
@@ -568,19 +568,9 @@
568
568
  overflow: hidden;
569
569
  text-overflow: ellipsis;
570
570
  }
571
- /* Time tag · same register as `.row-time` in the rooms list
572
- (10.5px mono, text-dim) so both lists read as one consistent
573
- "title · time" rhythm. Earlier this was 9px uppercase faint —
574
- visually a different "kind of metadata" from the rooms time. */
575
- .agent-row .agent-row-time {
576
- color: var(--text-dim);
577
- font-size: 10.5px;
578
- font-family: var(--mono);
579
- letter-spacing: 0;
580
- text-transform: none;
581
- white-space: nowrap;
582
- flex-shrink: 0;
583
- }
571
+ /* Time tag removed · the agent-row no longer surfaces creation
572
+ time. The space is given back to the title (which can now use
573
+ the full row width minus the hover-revealed pin button). */
584
574
  .agent-row .agent-row-subtitle {
585
575
  font-family: var(--mono);
586
576
  font-size: 9.5px;
@@ -934,13 +924,10 @@
934
924
  .agents-section-header.pinned { color: var(--text-soft); }
935
925
 
936
926
  /* ─── Pin toggle (per-row · hover-revealed for non-pinned) ───
937
- Positioned absolutely so the in-flow time tag (.agent-row-time /
938
- .row-time) sits flush against the right edge — same as the rooms
939
- list. Earlier the pin took 22px (18 + 4 margin) of in-flow width
940
- even when invisible (opacity:0 still occupies space), which shoved
941
- the agent's "7h" tag inward compared to the rooms list and made
942
- the two columns of timestamps look mis-aligned. The row-shell
943
- ancestor needs `position: relative` for this to anchor correctly. */
927
+ Positioned absolutely so it overlays the right edge of the row
928
+ without taking in-flow width (opacity:0 alone would still
929
+ reserve 22px and shrink the title). The row-shell ancestor
930
+ needs `position: relative` for this to anchor correctly. */
944
931
  .agent-row-shell, .session-row-shell { position: relative; }
945
932
  .row-top-line .pin-toggle,
946
933
  .agent-row-top-line .pin-toggle {
@@ -968,23 +955,12 @@
968
955
  }
969
956
  .session-row:hover .pin-toggle,
970
957
  .agent-row:hover .pin-toggle { opacity: 0.55; }
971
- /* Hover · hide the in-flow time so the absolutely-positioned pin
972
- button has the right edge to itself. Same pattern as the rooms
973
- list (`.session-row-shell:hover .row-time { visibility: hidden }`). */
974
- .agent-row-shell:hover .agent-row-time { visibility: hidden; }
975
958
  .pin-toggle:hover { opacity: 1 !important; color: var(--lime); }
976
959
  .session-row.pinned .pin-toggle,
977
960
  .agent-row.pinned .pin-toggle {
978
961
  opacity: 1;
979
962
  color: var(--lime);
980
963
  }
981
- /* Pinned · the lime pin glyph stays visible permanently, so the
982
- in-flow time tag has to hide too — otherwise the two stack on
983
- the right edge (pin + "7h" overlapping in the same 18px slot).
984
- The hover rule above only handles hover; pinned rows live in
985
- "always visible" state and need their own hide. */
986
- .agent-row.pinned .agent-row-time,
987
- .session-row.pinned .row-time { visibility: hidden; }
988
964
 
989
965
  /* The shell wraps the link + delete button as siblings so the click on
990
966
  the X button doesn't get absorbed by the anchor's navigation.
@@ -1038,10 +1014,8 @@
1038
1014
  z-index: 2;
1039
1015
  }
1040
1016
  .session-row-shell:hover .row-delete { display: flex; }
1041
- /* On hover the timestamp hides so the delete button doesn't double
1042
- up. The subtitle reserves right padding so its ellipsis stops
1043
- before the X. */
1044
- .session-row-shell:hover .row-time { visibility: hidden; }
1017
+ /* Subtitle reserves right padding so its ellipsis stops before
1018
+ the absolutely-positioned X delete button on hover. */
1045
1019
  .session-row-shell .row-subtitle { padding-right: 26px; }
1046
1020
  .row-delete:hover {
1047
1021
  border-color: var(--red);
@@ -1130,17 +1104,14 @@
1130
1104
  font-family: var(--sans);
1131
1105
  letter-spacing: -0.005em;
1132
1106
  }
1133
- .row-time {
1134
- font-size: 10.5px;
1135
- color: var(--text-dim);
1136
- flex-shrink: 0;
1137
- font-family: var(--mono);
1138
- }
1139
- .session-row-shell[data-status="live"] .row-time {
1107
+ /* Live indicator · was a `● ` prefix on the (now-removed) .row-time
1108
+ tag. Migrated to a title prefix so live rooms still read at a
1109
+ glance. The rest of the title stays its usual colour. */
1110
+ .session-row-shell[data-status="live"] .row-title::before {
1111
+ content: "● ";
1140
1112
  color: var(--lime);
1141
1113
  font-weight: 700;
1142
1114
  }
1143
- .session-row-shell[data-status="live"] .row-time::before { content: "● "; }
1144
1115
 
1145
1116
  .row-subtitle {
1146
1117
  font-size: 11.5px;
@@ -1845,8 +1816,7 @@
1845
1816
  .notes-item-passage { padding-right: 30px; }
1846
1817
  /* On hover · hide the trailing time tag so the delete button
1847
1818
  occupies the right-edge slot cleanly. visibility:hidden keeps
1848
- the layout box (the meta row doesn't reflow either). Same
1849
- pattern as `.session-row-shell:hover .row-time` in rooms. */
1819
+ the layout box (the meta row doesn't reflow either). */
1850
1820
  .notes-item:hover .notes-item-time { visibility: hidden; }
1851
1821
  .notes-item-link {
1852
1822
  display: block;