@inkandswitch/patchwork-pkg-base 0.0.131 → 0.0.132

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 (57) hide show
  1. package/module-settings-url +1 -1
  2. package/package.json +1 -1
  3. package/packages/account/dist/index.css +19 -0
  4. package/packages/account/dist/index.css.map +2 -2
  5. package/packages/add-doc-to-sidebar-button/button.js +6 -0
  6. package/packages/add-doc-to-sidebar-button/styles.css +8 -1
  7. package/packages/chat/dist/index.js +1 -1
  8. package/packages/codemirror-base/dist/tool.js +75 -59
  9. package/packages/codemirror-base/dist/tool.js.map +2 -2
  10. package/packages/codemirror-markdown/dist/extensions/markdown.js +25 -0
  11. package/packages/codemirror-markdown/dist/extensions/markdown.js.map +2 -2
  12. package/packages/comments-view/dist/assets/{main-DXYeEDFB.js → main-EQKeEvzx.js} +50 -3
  13. package/packages/comments-view/dist/assets/main-EQKeEvzx.js.map +1 -0
  14. package/packages/comments-view/dist/index.js +3 -3
  15. package/packages/doc-openwith/doc-openwith.js +15 -1
  16. package/packages/doc-presence/doc-presence.js +66 -23
  17. package/packages/drafts/dist/assets/{main-CG9HOCai.js → main-wz7oton3.js} +134 -80
  18. package/packages/drafts/dist/assets/main-wz7oton3.js.map +1 -0
  19. package/packages/drafts/dist/index.js +3 -3
  20. package/packages/file/dist/index.js +1 -1
  21. package/packages/file/dist/{tool-Bucjz6Ay.js → tool-CSiyzu4S.js} +51 -41
  22. package/packages/file/dist/tool-CSiyzu4S.js.map +1 -0
  23. package/packages/file/dist/{typescript-language-server-BId-R8tz.js → typescript-language-server-T-bVgxs5.js} +2 -2
  24. package/packages/file/dist/{typescript-language-server-BId-R8tz.js.map → typescript-language-server-T-bVgxs5.js.map} +1 -1
  25. package/packages/packages/dist/index.js +6 -1
  26. package/packages/patternwitch/tool.js +30 -3
  27. package/packages/providers/dist/assets/FocusProvider-CsJzhQWV.js +2 -0
  28. package/packages/providers/dist/assets/FocusProvider-CsJzhQWV.js.map +1 -0
  29. package/packages/providers/dist/index.js +1 -1
  30. package/packages/theming/dist/{active-theme-WA6XMDTP.js → active-theme-HEMDARRS.js} +3 -3
  31. package/packages/theming/dist/{chunk-4GOF67HA.js → chunk-2LCY4PP2.js} +2 -2
  32. package/packages/theming/dist/{chunk-L7WQSSFT.js → chunk-MJMDS3V5.js} +2 -2
  33. package/packages/theming/dist/{lychee-BMLMUNP6.css → lychee-BADZHTMJ.css} +1 -1
  34. package/packages/theming/dist/main.js +4 -4
  35. package/packages/theming/dist/{theme-titlebar-LG6PFBKR.js → theme-titlebar-JLYY4TZR.js} +3 -3
  36. package/packages/theming/dist/{theme-tray-R3PJDYCL.js → theme-tray-OZPNTCHA.js} +3 -3
  37. package/packages/theming/dist/tool.js +2 -2
  38. package/packages/threepane/dist/IsolatedDocumentArea-PIXYOA25.js +2 -0
  39. package/packages/threepane/dist/PatchworkFrame-O76GWRUL.js +2 -0
  40. package/packages/threepane/dist/{PatchworkFrame-HMA5KZLY.js.map → PatchworkFrame-O76GWRUL.js.map} +3 -3
  41. package/packages/threepane/dist/{chunk-UOTRB26X.js → chunk-Y2SEQB3F.js} +24 -8
  42. package/packages/threepane/dist/{chunk-UOTRB26X.js.map → chunk-Y2SEQB3F.js.map} +3 -3
  43. package/packages/threepane/dist/index.js +1 -1
  44. package/plugin-registry-url +1 -1
  45. package/packages/comments-view/dist/assets/main-DXYeEDFB.js.map +0 -1
  46. package/packages/drafts/dist/assets/main-CG9HOCai.js.map +0 -1
  47. package/packages/file/dist/tool-Bucjz6Ay.js.map +0 -1
  48. package/packages/providers/dist/assets/FocusProvider-AfpGH4B_.js +0 -2
  49. package/packages/providers/dist/assets/FocusProvider-AfpGH4B_.js.map +0 -1
  50. package/packages/threepane/dist/IsolatedDocumentArea-JJMLEL4O.js +0 -2
  51. package/packages/threepane/dist/PatchworkFrame-HMA5KZLY.js +0 -2
  52. /package/packages/theming/dist/{active-theme-WA6XMDTP.js.map → active-theme-HEMDARRS.js.map} +0 -0
  53. /package/packages/theming/dist/{chunk-4GOF67HA.js.map → chunk-2LCY4PP2.js.map} +0 -0
  54. /package/packages/theming/dist/{chunk-L7WQSSFT.js.map → chunk-MJMDS3V5.js.map} +0 -0
  55. /package/packages/theming/dist/{theme-titlebar-LG6PFBKR.js.map → theme-titlebar-JLYY4TZR.js.map} +0 -0
  56. /package/packages/theming/dist/{theme-tray-R3PJDYCL.js.map → theme-tray-OZPNTCHA.js.map} +0 -0
  57. /package/packages/threepane/dist/{IsolatedDocumentArea-JJMLEL4O.js.map → IsolatedDocumentArea-PIXYOA25.js.map} +0 -0
@@ -101,7 +101,7 @@ function DocOpenWith(handle, element) {
101
101
  }
102
102
 
103
103
  .doc-openwith-btn:hover,
104
- .doc-openwith-btn[data-open] {
104
+ .doc-openwith-btn--open {
105
105
  border-color: var(--doc-openwith-border-hover);
106
106
  background: var(--doc-openwith-hover);
107
107
  }
@@ -116,6 +116,18 @@ function DocOpenWith(handle, element) {
116
116
  background: var(--doc-openwith-bg);
117
117
  box-shadow: var(--studio-shadow-sm, 0 2px 8px rgba(0, 0, 0, 0.08));
118
118
  overflow: hidden;
119
+ /* Grows out of the button (transform-origin is set in toggleMenu, to
120
+ whichever edge it is aligned to). Closing is instant. */
121
+ transition:
122
+ opacity max(1ms, calc(150ms * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) var(--studio-ease-out, cubic-bezier(0.23, 1, 0.32, 1)),
123
+ scale max(1ms, calc(150ms * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) var(--studio-ease-out, cubic-bezier(0.23, 1, 0.32, 1));
124
+ }
125
+
126
+ @starting-style {
127
+ .doc-openwith-menu[popover]:popover-open {
128
+ opacity: 0;
129
+ scale: 0.97;
130
+ }
119
131
  }
120
132
 
121
133
  .doc-openwith-input {
@@ -254,9 +266,11 @@ function DocOpenWith(handle, element) {
254
266
  if (rect.left + menuWidth > window.innerWidth - 8) {
255
267
  menuEl.style.left = ""
256
268
  menuEl.style.right = window.innerWidth - rect.right + "px"
269
+ menuEl.style.transformOrigin = "top right"
257
270
  } else {
258
271
  menuEl.style.right = ""
259
272
  menuEl.style.left = rect.left + "px"
273
+ menuEl.style.transformOrigin = "top left"
260
274
  }
261
275
  menuEl.togglePopover()
262
276
  }
@@ -1,6 +1,6 @@
1
1
  import {render} from "solid-js/web"
2
2
  import html from "solid-js/html"
3
- import {createSignal} from "solid-js"
3
+ import {createMemo, createSignal, For, Show} from "solid-js"
4
4
  import {Presence} from "@automerge/automerge-repo"
5
5
  import {automergeUrlToServiceWorkerUrl} from "@inkandswitch/patchwork-filesystem"
6
6
  import {subscribe} from "@inkandswitch/patchwork-providers"
@@ -169,26 +169,45 @@ function DocPresence(handle, element) {
169
169
  connectToSelectedDocProvider(element)
170
170
  const session = joinDoc(handle)
171
171
 
172
- function face(entry, fadedFn) {
173
- const color = entry.color || "#888"
174
- const initial = (entry.name || "?")[0].toUpperCase()
175
- const imgUrl = entry.avatarUrl
176
- ? automergeUrlToServiceWorkerUrl(entry.avatarUrl)
177
- : null
172
+ // A face is built once and kept: everything about it that can change is
173
+ // read through `entry` (an accessor), so a peer's heartbeat updates the face
174
+ // it has rather than replacing it.
175
+ function face(entry, faded) {
176
+ const imgUrl = () => {
177
+ const avatarUrl = entry()?.avatarUrl
178
+ return avatarUrl ? automergeUrlToServiceWorkerUrl(avatarUrl) : null
179
+ }
178
180
  return html`<div
179
- class="doc-presence-face"
181
+ class=${() =>
182
+ "doc-presence-face" + (faded() ? " doc-presence-face--faded" : "")}
180
183
  style=${() => {
181
- let s = `--face-color:${color}; opacity:${fadedFn() ? 0.35 : 1};`
182
- if (imgUrl)
183
- s += ` background-image: url("${imgUrl}"); color: transparent;`
184
+ let s = `--face-color:${entry()?.color || "#888"};`
185
+ const url = imgUrl()
186
+ if (url) s += ` background-image: url("${url}"); color: transparent;`
184
187
  return s
185
188
  }}
186
- title=${entry.name}
189
+ title=${() => entry()?.name}
187
190
  >
188
- ${initial}
191
+ ${() => (entry()?.name || "?")[0].toUpperCase()}
189
192
  </div>`
190
193
  }
191
194
 
195
+ // One face per contact, keyed by its url. `session.peers()` is a fresh array
196
+ // of fresh objects on every presence event (a heartbeat every couple of
197
+ // seconds), so the list is keyed on the urls, which are stable, and each
198
+ // face looks its own peer up.
199
+ const peerUrlsOf = () =>
200
+ createMemo(() => session.peers().map(p => p.value.contactUrl), [], {
201
+ equals: (a, b) =>
202
+ a.length === b.length && a.every((url, i) => url === b[i]),
203
+ })
204
+ // holds on to the last state it saw: a face can outlive its peer by a tick
205
+ const peerState = url =>
206
+ createMemo(
207
+ prev =>
208
+ session.peers().find(p => p.value.contactUrl === url)?.value ?? prev,
209
+ )
210
+
192
211
  const style = document.createElement("style")
193
212
  style.textContent = `
194
213
  .doc-presence {
@@ -210,29 +229,53 @@ function DocPresence(handle, element) {
210
229
  line-height: 1;
211
230
  overflow: hidden;
212
231
  flex-shrink: 0;
213
- transition: opacity max(1ms, calc(0.3s * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) ease;
232
+ transition:
233
+ opacity max(1ms, calc(0.3s * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) ease,
234
+ scale max(1ms, calc(150ms * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) var(--studio-ease-out, cubic-bezier(0.23, 1, 0.32, 1));
214
235
  background-color: var(--color-base-200, #eee);
215
236
  background-size: cover;
216
237
  background-position: center;
217
238
  color: var(--color-base-content, #333);
218
239
  }
240
+ /* someone whose window isn't focused */
241
+ .doc-presence-face--faded {
242
+ opacity: 0.35;
243
+ }
244
+ /* Someone arriving while you watch fades in. The faces already here when
245
+ the bar is drawn don't: \`data-live\` goes on a frame after that. */
246
+ @starting-style {
247
+ .doc-presence[data-live] .doc-presence-face,
248
+ .doc-presence[data-live] .doc-presence-face--faded {
249
+ opacity: 0;
250
+ scale: 0.8;
251
+ }
252
+ }
219
253
  `
220
254
  element.appendChild(style)
221
255
 
222
256
  const dispose = render(
223
- () => html`<div class="doc-presence">
224
- ${() => {
225
- const s = selfInfo()
226
- if (!s) return null
227
- return face(s, () => !focused())
228
- }}
229
- ${() =>
230
- session.peers().map(p => face(p.value, () => !p.value.focused))}
231
- </div>`,
257
+ () => {
258
+ const peerUrls = peerUrlsOf()
259
+ return html`<div class="doc-presence">
260
+ <${Show} when=${() => selfInfo()}>
261
+ ${() => face(selfInfo, () => !focused())}
262
+ <//>
263
+ <${For} each=${() => peerUrls()}>
264
+ ${url => {
265
+ const state = peerState(url)
266
+ return face(state, () => !state()?.focused)
267
+ }}
268
+ <//>
269
+ </div>`
270
+ },
232
271
  element,
233
272
  )
273
+ const live = requestAnimationFrame(() =>
274
+ element.querySelector(".doc-presence")?.setAttribute("data-live", ""),
275
+ )
234
276
 
235
277
  return () => {
278
+ cancelAnimationFrame(live)
236
279
  leaveDoc(handle)
237
280
  style.remove()
238
281
  dispose()
@@ -97,6 +97,32 @@
97
97
  var(--drafts-shadow-sm);
98
98
  }
99
99
 
100
+ /* A merge just landed here: the ring the hover promised holds for a beat,
101
+ then fades. It is drawn over the card, since the card clips its own shadow
102
+ (see LANDED_MS in DraftsSidebar.tsx, which outlasts this). */
103
+ .draft-card[data-landed] {
104
+ position: relative;
105
+ }
106
+ .draft-card[data-landed]::after {
107
+ content: "";
108
+ position: absolute;
109
+ inset: 0;
110
+ border-radius: inherit;
111
+ border: 2px solid var(--drafts-primary);
112
+ background: color-mix(in oklch, var(--drafts-primary), transparent 88%);
113
+ pointer-events: none;
114
+ animation: draft-landed max(1ms, calc(600ms * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) ease-out both;
115
+ }
116
+ @keyframes draft-landed {
117
+ 0%,
118
+ 30% {
119
+ opacity: 1;
120
+ }
121
+ 100% {
122
+ opacity: 0;
123
+ }
124
+ }
125
+
100
126
  .draft-card-header {
101
127
  /* The header is a div (a rename input can't nest in a button), which,
102
128
  unlike a button, doesn't default to border-box — without this the
@@ -1299,6 +1325,7 @@ const EMPTY_DRAFT_LIST = {
1299
1325
  actorAttributionUrl: null
1300
1326
  };
1301
1327
  const DRAFTS_VERSION = "0.0.45";
1328
+ const LANDED_MS = 700;
1302
1329
  console.log(`[drafts] DraftsSidebar v${DRAFTS_VERSION} loaded`);
1303
1330
  function DraftsSidebar(props) {
1304
1331
  const [hostDoc, hostDocHandle] = subscribeDoc(props.element, {
@@ -1598,6 +1625,18 @@ function DraftsSidebar(props) {
1598
1625
  return `Fork from ${formatVersionTime(time)}`;
1599
1626
  });
1600
1627
  const [mergeHighlight, setMergeHighlight] = createSignal(false);
1628
+ const [landed, setLanded] = createSignal(null);
1629
+ let landedTimer;
1630
+ const flashLanded = (target) => {
1631
+ clearTimeout(landedTimer);
1632
+ setLanded(target);
1633
+ landedTimer = setTimeout(() => setLanded(null), LANDED_MS);
1634
+ };
1635
+ onCleanup(() => clearTimeout(landedTimer));
1636
+ const draftUrls = createMemo(() => list().drafts.map((s) => s.url), [], {
1637
+ equals: (a, b) => a.length === b.length && a.every((url, i) => url === b[i])
1638
+ });
1639
+ const summaryFor = (url) => createMemo((prev) => list().drafts.find((s) => s.url === url) ?? prev, list().drafts.find((s) => s.url === url));
1601
1640
  const draftDepth = (summary) => {
1602
1641
  const byUrl = new Map(list().drafts.map((s) => [s.url, s]));
1603
1642
  const seen = /* @__PURE__ */ new Set();
@@ -1622,7 +1661,9 @@ function DraftsSidebar(props) {
1622
1661
  }
1623
1662
  const draftHandle = await repo.find(draftUrl);
1624
1663
  await mergeDraft(repo, draftHandle);
1625
- selectDraft(parentUrl && parentUrl !== list().main.url ? parentUrl : null);
1664
+ const target = parentUrl && parentUrl !== list().main.url ? parentUrl : null;
1665
+ selectDraft(target);
1666
+ flashLanded(target ?? "main");
1626
1667
  };
1627
1668
  const onDeleteDraft = async () => {
1628
1669
  const draftUrl = selected();
@@ -1703,65 +1744,74 @@ function DraftsSidebar(props) {
1703
1744
  onForkAt: () => void onForkSelection(true),
1704
1745
  get isMergeTarget() {
1705
1746
  return memo(() => !!mergeHighlight())() && mergeParentUrl() === list().main.url;
1747
+ },
1748
+ get justLanded() {
1749
+ return landed() === "main";
1706
1750
  }
1707
1751
  }), null);
1708
1752
  insert(_el$2, createComponent(For, {
1709
1753
  get each() {
1710
- return list().drafts;
1754
+ return draftUrls();
1711
1755
  },
1712
- children: (summary) => createComponent(DraftCard, {
1713
- get url() {
1714
- return summary.url;
1715
- },
1716
- get members() {
1717
- return summary.members;
1718
- },
1719
- get changeGroupDocUrl() {
1720
- return summary.changeGroupDocUrl;
1721
- },
1722
- get mainDocUrl() {
1723
- return hostDocHandle()?.url;
1724
- },
1725
- get isSelected() {
1726
- return selected() === summary.url;
1727
- },
1728
- get name() {
1729
- return summary.name;
1730
- },
1731
- get depth() {
1732
- return draftDepth(summary);
1733
- },
1734
- onRename: (name) => void onRename(summary.url, name),
1735
- onSelect: selectDraft,
1736
- onScrub: (scrub) => onScrub(summary.url, summary.members, scrub),
1737
- scrubber: () => selected() === summary.url ? scrubber() : null,
1738
- onBaselineScrub: (base) => onBaselineScrub(summary.url, summary.members, base),
1739
- baseliner: () => selected() === summary.url ? baseliner() : null,
1740
- checkpoint: () => selected() === summary.url ? checkedOut()?.at ?? null : null,
1741
- get hasCheckpoint() {
1742
- return memo(() => selected() === summary.url)() && isPinned();
1743
- },
1744
- onReturnToLatest: clearCheckpoint,
1745
- get eyeOpen() {
1746
- return memo(() => selected() === summary.url)() && eyeOpen();
1747
- },
1748
- eyeDisabled: false,
1749
- onToggleEye: toggleEye,
1750
- onFork: () => void onForkSelection(false),
1751
- get forkAtLabel() {
1752
- return forkAtLabel();
1753
- },
1754
- onForkAt: () => void onForkSelection(true),
1755
- get mergeLabel() {
1756
- return `Merge into "${mergeTargetName()}"`;
1757
- },
1758
- onMerge: () => void onMergeDraft(),
1759
- onMergeHover: setMergeHighlight,
1760
- onDelete: () => void onDeleteDraft(),
1761
- get isMergeTarget() {
1762
- return memo(() => !!mergeHighlight())() && mergeParentUrl() === summary.url;
1763
- }
1764
- })
1756
+ children: (url) => {
1757
+ const summary = summaryFor(url);
1758
+ return createComponent(DraftCard, {
1759
+ get url() {
1760
+ return summary().url;
1761
+ },
1762
+ get members() {
1763
+ return summary().members;
1764
+ },
1765
+ get changeGroupDocUrl() {
1766
+ return summary().changeGroupDocUrl;
1767
+ },
1768
+ get mainDocUrl() {
1769
+ return hostDocHandle()?.url;
1770
+ },
1771
+ get isSelected() {
1772
+ return selected() === summary().url;
1773
+ },
1774
+ get name() {
1775
+ return summary().name;
1776
+ },
1777
+ get depth() {
1778
+ return draftDepth(summary());
1779
+ },
1780
+ onRename: (name) => void onRename(summary().url, name),
1781
+ onSelect: selectDraft,
1782
+ onScrub: (scrub) => onScrub(summary().url, summary().members, scrub),
1783
+ scrubber: () => selected() === summary().url ? scrubber() : null,
1784
+ onBaselineScrub: (base) => onBaselineScrub(summary().url, summary().members, base),
1785
+ baseliner: () => selected() === summary().url ? baseliner() : null,
1786
+ checkpoint: () => selected() === summary().url ? checkedOut()?.at ?? null : null,
1787
+ get hasCheckpoint() {
1788
+ return memo(() => selected() === summary().url)() && isPinned();
1789
+ },
1790
+ onReturnToLatest: clearCheckpoint,
1791
+ get eyeOpen() {
1792
+ return memo(() => selected() === summary().url)() && eyeOpen();
1793
+ },
1794
+ eyeDisabled: false,
1795
+ onToggleEye: toggleEye,
1796
+ onFork: () => void onForkSelection(false),
1797
+ get forkAtLabel() {
1798
+ return forkAtLabel();
1799
+ },
1800
+ onForkAt: () => void onForkSelection(true),
1801
+ get mergeLabel() {
1802
+ return `Merge into "${mergeTargetName()}"`;
1803
+ },
1804
+ onMerge: () => void onMergeDraft(),
1805
+ onMergeHover: setMergeHighlight,
1806
+ onDelete: () => void onDeleteDraft(),
1807
+ get isMergeTarget() {
1808
+ return memo(() => !!mergeHighlight())() && mergeParentUrl() === summary().url;
1809
+ },
1810
+ get justLanded() {
1811
+ return landed() === summary().url;
1812
+ }
1813
+ });
1814
+ }
1765
1815
  }), null);
1766
1816
  return _el$2;
1767
1817
  }
@@ -2080,15 +2130,17 @@ function MainCard(props) {
2080
2130
  }
2081
2131
  }), null);
2082
2132
  effect((_p$) => {
2083
- var _v$ = props.isSelected ? "" : void 0, _v$2 = menuOpen() ? "" : void 0, _v$3 = props.isMergeTarget ? "" : void 0;
2133
+ var _v$ = props.isSelected ? "" : void 0, _v$2 = menuOpen() ? "" : void 0, _v$3 = props.isMergeTarget ? "" : void 0, _v$4 = props.justLanded ? "" : void 0;
2084
2134
  _v$ !== _p$.e && setAttribute(_el$5, "data-selected", _p$.e = _v$);
2085
2135
  _v$2 !== _p$.t && setAttribute(_el$5, "data-menu-open", _p$.t = _v$2);
2086
2136
  _v$3 !== _p$.a && setAttribute(_el$5, "data-merge-target", _p$.a = _v$3);
2137
+ _v$4 !== _p$.o && setAttribute(_el$5, "data-landed", _p$.o = _v$4);
2087
2138
  return _p$;
2088
2139
  }, {
2089
2140
  e: void 0,
2090
2141
  t: void 0,
2091
- a: void 0
2142
+ a: void 0,
2143
+ o: void 0
2092
2144
  });
2093
2145
  return _el$5;
2094
2146
  })();
@@ -2198,17 +2250,19 @@ function DraftCard(props) {
2198
2250
  }
2199
2251
  }), null);
2200
2252
  effect((_p$) => {
2201
- var _v$4 = props.isSelected ? "" : void 0, _v$5 = menuOpen() ? "" : void 0, _v$6 = props.isMergeTarget ? "" : void 0, _v$7 = `${Math.min(props.depth + 1, 5)}rem`;
2202
- _v$4 !== _p$.e && setAttribute(_el$0, "data-selected", _p$.e = _v$4);
2203
- _v$5 !== _p$.t && setAttribute(_el$0, "data-menu-open", _p$.t = _v$5);
2204
- _v$6 !== _p$.a && setAttribute(_el$0, "data-merge-target", _p$.a = _v$6);
2205
- _v$7 !== _p$.o && setStyleProperty(_el$0, "margin-left", _p$.o = _v$7);
2253
+ var _v$5 = props.isSelected ? "" : void 0, _v$6 = menuOpen() ? "" : void 0, _v$7 = props.isMergeTarget ? "" : void 0, _v$8 = props.justLanded ? "" : void 0, _v$9 = `${Math.min(props.depth + 1, 5)}rem`;
2254
+ _v$5 !== _p$.e && setAttribute(_el$0, "data-selected", _p$.e = _v$5);
2255
+ _v$6 !== _p$.t && setAttribute(_el$0, "data-menu-open", _p$.t = _v$6);
2256
+ _v$7 !== _p$.a && setAttribute(_el$0, "data-merge-target", _p$.a = _v$7);
2257
+ _v$8 !== _p$.o && setAttribute(_el$0, "data-landed", _p$.o = _v$8);
2258
+ _v$9 !== _p$.i && setStyleProperty(_el$0, "margin-left", _p$.i = _v$9);
2206
2259
  return _p$;
2207
2260
  }, {
2208
2261
  e: void 0,
2209
2262
  t: void 0,
2210
2263
  a: void 0,
2211
- o: void 0
2264
+ o: void 0,
2265
+ i: void 0
2212
2266
  });
2213
2267
  return _el$0;
2214
2268
  })();
@@ -2295,9 +2349,9 @@ function CardMenu(props) {
2295
2349
  })()]
2296
2350
  }), null);
2297
2351
  effect((_p$) => {
2298
- var _v$8 = props.forkDisabled, _v$9 = props.forkDisabled ? "Drafts aren't supported for folders yet" : "Fork a new draft from the latest version";
2299
- _v$8 !== _p$.e && (_el$17.disabled = _p$.e = _v$8);
2300
- _v$9 !== _p$.t && setAttribute(_el$17, "title", _p$.t = _v$9);
2352
+ var _v$0 = props.forkDisabled, _v$1 = props.forkDisabled ? "Drafts aren't supported for folders yet" : "Fork a new draft from the latest version";
2353
+ _v$0 !== _p$.e && (_el$17.disabled = _p$.e = _v$0);
2354
+ _v$1 !== _p$.t && setAttribute(_el$17, "title", _p$.t = _v$1);
2301
2355
  return _p$;
2302
2356
  }, {
2303
2357
  e: void 0,
@@ -2392,11 +2446,11 @@ function EyeToggle(props) {
2392
2446
  }
2393
2447
  }));
2394
2448
  effect((_p$) => {
2395
- var _v$0 = props.open ? "" : void 0, _v$1 = props.disabled ? "" : void 0, _v$10 = props.disabled, _v$11 = props.disabled ? "Nothing to compare yet — select a version in the timeline first" : props.open ? "Hide changes" : "Show what changed";
2396
- _v$0 !== _p$.e && setAttribute(_el$32, "data-active", _p$.e = _v$0);
2397
- _v$1 !== _p$.t && setAttribute(_el$32, "data-disabled", _p$.t = _v$1);
2398
- _v$10 !== _p$.a && setAttribute(_el$32, "aria-disabled", _p$.a = _v$10);
2399
- _v$11 !== _p$.o && setAttribute(_el$32, "title", _p$.o = _v$11);
2449
+ var _v$10 = props.open ? "" : void 0, _v$11 = props.disabled ? "" : void 0, _v$12 = props.disabled, _v$13 = props.disabled ? "Nothing to compare yet — select a version in the timeline first" : props.open ? "Hide changes" : "Show what changed";
2450
+ _v$10 !== _p$.e && setAttribute(_el$32, "data-active", _p$.e = _v$10);
2451
+ _v$11 !== _p$.t && setAttribute(_el$32, "data-disabled", _p$.t = _v$11);
2452
+ _v$12 !== _p$.a && setAttribute(_el$32, "aria-disabled", _p$.a = _v$12);
2453
+ _v$13 !== _p$.o && setAttribute(_el$32, "title", _p$.o = _v$13);
2400
2454
  return _p$;
2401
2455
  }, {
2402
2456
  e: void 0,
@@ -2867,9 +2921,9 @@ function DraftChangesList(props) {
2867
2921
  return [(() => {
2868
2922
  var _el$44 = _tmpl$25();
2869
2923
  effect((_p$) => {
2870
- var _v$12 = `${Math.min(tokenGeometry()?.top ?? 0, baselineGeometry().top)}px`, _v$13 = `${Math.abs((tokenGeometry()?.top ?? 0) - baselineGeometry().top)}px`;
2871
- _v$12 !== _p$.e && setStyleProperty(_el$44, "top", _p$.e = _v$12);
2872
- _v$13 !== _p$.t && setStyleProperty(_el$44, "height", _p$.t = _v$13);
2924
+ var _v$14 = `${Math.min(tokenGeometry()?.top ?? 0, baselineGeometry().top)}px`, _v$15 = `${Math.abs((tokenGeometry()?.top ?? 0) - baselineGeometry().top)}px`;
2925
+ _v$14 !== _p$.e && setStyleProperty(_el$44, "top", _p$.e = _v$14);
2926
+ _v$15 !== _p$.t && setStyleProperty(_el$44, "height", _p$.t = _v$15);
2873
2927
  return _p$;
2874
2928
  }, {
2875
2929
  e: void 0,
@@ -2942,11 +2996,11 @@ function AuthorAvatars(props) {
2942
2996
  }
2943
2997
  }));
2944
2998
  effect((_p$) => {
2945
- var _v$14 = author.contactUrl ? void 0 : author.key, _v$15 = author.contactUrl ? void 0 : authorColor(author.key), _v$16 = i() === 0 ? "0" : "-4px", _v$17 = String(visible().length - i());
2946
- _v$14 !== _p$.e && setAttribute(_el$60, "title", _p$.e = _v$14);
2947
- _v$15 !== _p$.t && setStyleProperty(_el$60, "background", _p$.t = _v$15);
2948
- _v$16 !== _p$.a && setStyleProperty(_el$60, "margin-left", _p$.a = _v$16);
2949
- _v$17 !== _p$.o && setStyleProperty(_el$60, "z-index", _p$.o = _v$17);
2999
+ var _v$16 = author.contactUrl ? void 0 : author.key, _v$17 = author.contactUrl ? void 0 : authorColor(author.key), _v$18 = i() === 0 ? "0" : "-4px", _v$19 = String(visible().length - i());
3000
+ _v$16 !== _p$.e && setAttribute(_el$60, "title", _p$.e = _v$16);
3001
+ _v$17 !== _p$.t && setStyleProperty(_el$60, "background", _p$.t = _v$17);
3002
+ _v$18 !== _p$.a && setStyleProperty(_el$60, "margin-left", _p$.a = _v$18);
3003
+ _v$19 !== _p$.o && setStyleProperty(_el$60, "z-index", _p$.o = _v$19);
2950
3004
  return _p$;
2951
3005
  }, {
2952
3006
  e: void 0,
@@ -3120,4 +3174,4 @@ const renderDraftsSidebar = (_handle, element) => {
3120
3174
  export {
3121
3175
  renderDraftsSidebar
3122
3176
  };
3123
- //# sourceMappingURL=main-CG9HOCai.js.map
3177
+ //# sourceMappingURL=main-wz7oton3.js.map