@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
@@ -3,14 +3,14 @@
3
3
  try {
4
4
  if (typeof document != "undefined") {
5
5
  var elementStyle = document.createElement("style");
6
- elementStyle.appendChild(document.createTextNode("@layer package {\n:root,\n:host,\n[theme] {\n --comments-fg: var(--text-editor-line, var(--studio-line, black));\n --comments-muted-fg: var(--studio-line-offset-50, #999);\n --comments-bg: var(--text-editor-fill, var(--studio-fill, white));\n --comments-border: var(--studio-fill-offset-20, #ccc);\n --comments-hover-bg: var(--studio-fill-offset-10, #f5f5f5);\n --comments-font: var(--studio-family-sans, system-ui, sans-serif);\n --comments-accent: var(--studio-secondary, #33ccf8);\n}\n}\n\n/* The width:100% boxes below (panel, textarea) also carry padding and a\n border, so without border-box they extend past their container and overflow\n it. Scoped to the panel and the thread card so the injected stylesheet never\n touches the host page (it may be injected into document.head, not a shadow\n root). The card is covered on its own because a single thread renders\n standalone too — e.g. in the editor's comment popover, with no panel around\n it — and its draft textarea would otherwise spill out of the card. */\n.comments-panel,\n.comments-panel *,\n.comments-panel *::before,\n.comments-panel *::after,\n.comments-thread-card,\n.comments-thread-card *,\n.comments-thread-card *::before,\n.comments-thread-card *::after {\n box-sizing: border-box;\n}\n\n.comments-panel {\n height: 100%;\n width: 100%;\n overflow: auto;\n display: flex;\n flex-direction: column;\n padding: 0.5rem;\n gap: 0.5rem;\n font-family: var(--comments-font);\n color: var(--comments-fg);\n}\n\n.comments-panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 0.75rem;\n color: var(--comments-muted-fg);\n}\n\n.comments-panel-header-title {\n font-weight: 500;\n}\n\n.comments-empty {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1.5rem 0.5rem;\n text-align: center;\n font-size: 0.875rem;\n color: var(--comments-muted-fg);\n}\n\n.comments-thread {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n\n/* A thread that arrived while the doc was open (see SETTLE_MS in\n CommentsView.tsx). Its card and actions mount whenever the `comment-thread`\n tool finishes loading, so they animate on mount rather than the wrapper,\n which could otherwise lift in while still empty. */\n.comments-thread[data-new] > patchwork-view > * {\n transition:\n opacity max(1ms, calc(200ms * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) var(--studio-ease-out, cubic-bezier(0.23, 1, 0.32, 1)),\n transform max(1ms, calc(200ms * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) var(--studio-ease-out, cubic-bezier(0.23, 1, 0.32, 1));\n}\n@starting-style {\n .comments-thread[data-new] > patchwork-view > * {\n opacity: 0;\n transform: translateY(-4px) scale(0.98);\n }\n}\n\n/* The thread's card + actions are rendered by the `comment-thread` tool into\n its <patchwork-view> host, so that host is the flex column that lays them\n out (a custom element is `display: inline` by default). */\n.comments-thread > patchwork-view {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n\n.comments-thread-card {\n background: var(--comments-bg);\n border: var(--studio-border-width, 1px) var(--studio-border-style, solid) var(--comments-border);\n padding: 0.5rem;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n cursor: var(--studio-cursor-pointer, pointer);\n border-radius: 6px;\n transition:\n border-color var(--studio-transition, 0.15s ease),\n background var(--studio-transition, 0.15s ease),\n box-shadow var(--studio-transition, 0.15s ease);\n}\n\n.comments-thread-card--primary {\n box-shadow:\n 0 10px 15px -3px rgb(0 0 0 / 0.1),\n 0 4px 6px -4px rgb(0 0 0 / 0.1);\n}\n\n.comments-thread-card--secondary {\n box-shadow:\n 0 4px 6px -1px rgb(0 0 0 / 0.1),\n 0 2px 4px -2px rgb(0 0 0 / 0.1);\n}\n\n.comments-thread-card--inactive {\n box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n}\n\n/* In the sidebar, where threads sit side by side, the selected one needs to\n stand out from the rest: an accent border and ring, faintly tinted. A thread\n embedded on its own defaults to primary, so this is scoped to the panel. */\n.comments-panel .comments-thread-card--primary {\n border-color: var(--comments-accent);\n background: color-mix(in srgb, var(--comments-accent) 6%, var(--comments-bg));\n box-shadow:\n 0 0 0 1px var(--comments-accent),\n 0 6px 14px -4px rgb(0 0 0 / 0.15);\n}\n\n/* Threads that also overlap the selection: a softer accent border. */\n.comments-panel .comments-thread-card--secondary {\n border-color: color-mix(\n in srgb,\n var(--comments-accent) 50%,\n var(--comments-border)\n );\n box-shadow: 0 2px 4px -2px rgb(0 0 0 / 0.1);\n}\n\n.comments-panel .comments-thread-card--inactive {\n box-shadow: none;\n}\n\n/* Hovering a thread highlights its target, so hint that it's live. */\n.comments-panel .comments-thread:hover .comments-thread-card--inactive {\n border-color: color-mix(\n in srgb,\n var(--comments-accent) 40%,\n var(--comments-border)\n );\n background: var(--comments-hover-bg);\n}\n\n/* Resolved threads are hidden in the sidebar but shown when embedded. Keep\n them clearly readable, just visibly \"settled\": muted fill, dashed border,\n and slightly dimmed so they read as archived rather than active. */\n.comments-thread-card--resolved {\n background: var(--comments-hover-bg);\n border-style: dashed;\n opacity: 0.75;\n}\n\n.comments-thread-resolved-label {\n align-self: flex-start;\n font-size: 0.6875rem;\n font-weight: 500;\n text-transform: uppercase;\n letter-spacing: var(--studio-chrome-letter-spacing, 0.03em);\n padding: 0.0625rem 0.375rem;\n border-radius: 0.625rem;\n color: var(--comments-muted-fg);\n border: var(--studio-border-width, 1px) var(--studio-border-style, solid) var(--comments-border);\n}\n\n.comments-thread-card-body {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n\n.comments-thread-doc-level {\n font-size: 0.6875rem;\n text-transform: uppercase;\n letter-spacing: var(--studio-chrome-letter-spacing, 0.03em);\n color: var(--comments-muted-fg);\n}\n\n.comments-thread-header {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n}\n\n.comments-thread-actions {\n display: flex;\n flex-direction: row;\n gap: 0.5rem;\n justify-content: flex-end;\n}\n\n.comment-card {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n\n.comment-header {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n}\n\n.comment-author {\n display: flex;\n flex-direction: row;\n gap: 0.5rem;\n align-items: center;\n}\n\n.comment-author-name {\n font-size: 0.875rem;\n font-weight: 500;\n white-space: nowrap;\n color: var(--comments-fg);\n}\n\n.comment-timestamp {\n font-size: 0.75rem;\n color: var(--comments-muted-fg);\n}\n\n.comment-content {\n font-size: 1rem;\n color: var(--comments-fg);\n white-space: pre-wrap;\n overflow-wrap: break-word;\n}\n\n/* The draft editor is a cute.txt (CodeMirror) instance. Its inner\n padding/font come from the injected cute.txt styles. */\n.comment-draft-editor {\n height: 6rem;\n min-height: 6rem;\n min-width: 0;\n width: 100%;\n border: var(--studio-border-width, 1px) var(--studio-border-style, solid) var(--comments-border);\n border-radius: 0.5rem;\n color: var(--comments-fg);\n background: var(--comments-bg);\n overflow: hidden;\n}\n\n.comment-draft-editor .cm-content {\n box-sizing: border-box;\n min-height: 0;\n min-width: 0;\n margin: 0;\n padding: 0.5rem;\n}\n\n.comment-draft-editor .cm-line {\n margin: 0;\n padding: 0;\n}\n\n.comment-draft-editor .cm-scroller {\n height: 100%;\n min-width: 0;\n}\n\n.comment-draft-editor:focus-within {\n outline: var(--studio-focus-ring, 2px solid var(--comments-accent));\n outline-offset: var(--studio-focus-ring-offset, 1px);\n}\n\n.comment-btn {\n padding: 0.25rem 0.5rem;\n border-radius: 0.25rem;\n font-family: inherit;\n font-size: 0.875rem;\n cursor: var(--studio-cursor-pointer, pointer);\n border: none;\n background: transparent;\n color: var(--comments-fg);\n}\n\n.comment-btn:hover {\n background: var(--studio-hover-fill, var(--comments-hover-bg));\n}"));
6
+ elementStyle.appendChild(document.createTextNode("@layer package {\n:root,\n:host,\n[theme] {\n --comments-fg: var(--text-editor-line, var(--studio-line, black));\n --comments-muted-fg: var(--studio-line-offset-50, #999);\n --comments-bg: var(--text-editor-fill, var(--studio-fill, white));\n --comments-border: var(--studio-fill-offset-20, #ccc);\n --comments-hover-bg: var(--studio-fill-offset-10, #f5f5f5);\n --comments-font: var(--studio-family-sans, system-ui, sans-serif);\n --comments-accent: var(--studio-secondary, #33ccf8);\n}\n}\n\n/* The width:100% boxes below (panel, textarea) also carry padding and a\n border, so without border-box they extend past their container and overflow\n it. Scoped to the panel and the thread card so the injected stylesheet never\n touches the host page (it may be injected into document.head, not a shadow\n root). The card is covered on its own because a single thread renders\n standalone too — e.g. in the editor's comment popover, with no panel around\n it — and its draft textarea would otherwise spill out of the card. */\n.comments-panel,\n.comments-panel *,\n.comments-panel *::before,\n.comments-panel *::after,\n.comments-thread-card,\n.comments-thread-card *,\n.comments-thread-card *::before,\n.comments-thread-card *::after {\n box-sizing: border-box;\n}\n\n.comments-panel {\n height: 100%;\n width: 100%;\n overflow: auto;\n display: flex;\n flex-direction: column;\n padding: 0.5rem;\n gap: 0.5rem;\n font-family: var(--comments-font);\n color: var(--comments-fg);\n}\n\n.comments-panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 0.75rem;\n color: var(--comments-muted-fg);\n}\n\n.comments-panel-header-title {\n font-weight: 500;\n}\n\n.comments-empty {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1.5rem 0.5rem;\n text-align: center;\n font-size: 0.875rem;\n color: var(--comments-muted-fg);\n}\n\n.comments-thread {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n\n/* A thread that arrived while the doc was open (see SETTLE_MS in\n CommentsView.tsx). Its card and actions mount whenever the `comment-thread`\n tool finishes loading, so they animate on mount rather than the wrapper,\n which could otherwise lift in while still empty. */\n.comments-thread[data-new] > patchwork-view > * {\n transition:\n opacity max(1ms, calc(200ms * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) var(--studio-ease-out, cubic-bezier(0.23, 1, 0.32, 1)),\n transform max(1ms, calc(200ms * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) var(--studio-ease-out, cubic-bezier(0.23, 1, 0.32, 1));\n}\n@starting-style {\n .comments-thread[data-new] > patchwork-view > * {\n opacity: 0;\n transform: translateY(-4px) scale(0.98);\n }\n}\n\n/* The thread's card + actions are rendered by the `comment-thread` tool into\n its <patchwork-view> host, so that host is the flex column that lays them\n out (a custom element is `display: inline` by default). */\n.comments-thread > patchwork-view {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n\n.comments-thread-card {\n background: var(--comments-bg);\n border: var(--studio-border-width, 1px) var(--studio-border-style, solid) var(--comments-border);\n padding: 0.5rem;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n cursor: var(--studio-cursor-pointer, pointer);\n border-radius: 6px;\n transition:\n border-color var(--studio-transition, 0.15s ease),\n background var(--studio-transition, 0.15s ease),\n box-shadow var(--studio-transition, 0.15s ease);\n}\n\n.comments-thread-card--primary {\n box-shadow:\n 0 10px 15px -3px rgb(0 0 0 / 0.1),\n 0 4px 6px -4px rgb(0 0 0 / 0.1);\n}\n\n.comments-thread-card--secondary {\n box-shadow:\n 0 4px 6px -1px rgb(0 0 0 / 0.1),\n 0 2px 4px -2px rgb(0 0 0 / 0.1);\n}\n\n.comments-thread-card--inactive {\n box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n}\n\n/* In the sidebar, where threads sit side by side, the selected one needs to\n stand out from the rest: an accent border and ring, faintly tinted. A thread\n embedded on its own defaults to primary, so this is scoped to the panel. */\n.comments-panel .comments-thread-card--primary {\n border-color: var(--comments-accent);\n background: color-mix(in srgb, var(--comments-accent) 6%, var(--comments-bg));\n box-shadow:\n 0 0 0 1px var(--comments-accent),\n 0 6px 14px -4px rgb(0 0 0 / 0.15);\n}\n\n/* Threads that also overlap the selection: a softer accent border. */\n.comments-panel .comments-thread-card--secondary {\n border-color: color-mix(\n in srgb,\n var(--comments-accent) 50%,\n var(--comments-border)\n );\n box-shadow: 0 2px 4px -2px rgb(0 0 0 / 0.1);\n}\n\n.comments-panel .comments-thread-card--inactive {\n box-shadow: none;\n}\n\n/* Hovering a thread highlights its target, so hint that it's live. */\n.comments-panel .comments-thread:hover .comments-thread-card--inactive {\n border-color: color-mix(\n in srgb,\n var(--comments-accent) 40%,\n var(--comments-border)\n );\n background: var(--comments-hover-bg);\n}\n\n/* Resolved threads are hidden in the sidebar but shown when embedded. Keep\n them clearly readable, just visibly \"settled\": muted fill, dashed border,\n and slightly dimmed so they read as archived rather than active. */\n.comments-thread-card--resolved {\n background: var(--comments-hover-bg);\n border-style: dashed;\n opacity: 0.75;\n}\n\n.comments-thread-resolved-label {\n align-self: flex-start;\n font-size: 0.6875rem;\n font-weight: 500;\n text-transform: uppercase;\n letter-spacing: var(--studio-chrome-letter-spacing, 0.03em);\n padding: 0.0625rem 0.375rem;\n border-radius: 0.625rem;\n color: var(--comments-muted-fg);\n border: var(--studio-border-width, 1px) var(--studio-border-style, solid) var(--comments-border);\n}\n\n.comments-thread-card-body {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n\n.comments-thread-doc-level {\n font-size: 0.6875rem;\n text-transform: uppercase;\n letter-spacing: var(--studio-chrome-letter-spacing, 0.03em);\n color: var(--comments-muted-fg);\n}\n\n.comments-thread-header {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n}\n\n.comments-thread-actions {\n display: flex;\n flex-direction: row;\n gap: 0.5rem;\n justify-content: flex-end;\n}\n\n.comment-card {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n\n.comment-header {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n}\n\n.comment-author {\n display: flex;\n flex-direction: row;\n gap: 0.5rem;\n align-items: center;\n}\n\n.comment-author-name {\n font-size: 0.875rem;\n font-weight: 500;\n white-space: nowrap;\n color: var(--comments-fg);\n}\n\n.comment-timestamp {\n font-size: 0.75rem;\n color: var(--comments-muted-fg);\n}\n\n.comment-content {\n font-size: 1rem;\n color: var(--comments-fg);\n white-space: pre-wrap;\n overflow-wrap: break-word;\n}\n\n/* The draft editor is a cute.txt (CodeMirror) instance. Its inner\n padding/font come from the injected cute.txt styles. */\n.comment-draft-editor {\n height: 6rem;\n min-height: 6rem;\n min-width: 0;\n width: 100%;\n border: var(--studio-border-width, 1px) var(--studio-border-style, solid) var(--comments-border);\n border-radius: 0.5rem;\n color: var(--comments-fg);\n background: var(--comments-bg);\n overflow: hidden;\n}\n\n.comment-draft-editor .cm-content {\n box-sizing: border-box;\n min-height: 0;\n min-width: 0;\n margin: 0;\n padding: 0.5rem;\n}\n\n.comment-draft-editor .cm-line {\n margin: 0;\n padding: 0;\n}\n\n.comment-draft-editor .cm-scroller {\n height: 100%;\n min-width: 0;\n}\n\n.comment-draft-editor:focus-within {\n outline: var(--studio-focus-ring, 2px solid var(--comments-accent));\n outline-offset: var(--studio-focus-ring-offset, 1px);\n}\n\n.comment-btn {\n padding: 0.25rem 0.5rem;\n border-radius: 0.25rem;\n font-family: inherit;\n font-size: 0.875rem;\n cursor: var(--studio-cursor-pointer, pointer);\n border: none;\n background: transparent;\n color: var(--comments-fg);\n transition: scale max(1ms, calc(100ms * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1))) var(--studio-ease-out, cubic-bezier(0.23, 1, 0.32, 1));\n}\n\n/* a small press, so Resolve / Reply / Save feel heard before the card changes */\n.comment-btn:active:not(:disabled) {\n scale: 0.97;\n}\n\n.comment-btn:hover {\n background: var(--studio-hover-fill, var(--comments-hover-bg));\n}\n\n/* The thread the editor's caret just moved into: a brief ring, so the eye\n finds it in the list (see CommentsView's primary-thread effect). */\n.comments-panel .comments-thread[data-flash] {\n border-radius: 8px;\n animation: comments-thread-flash\n max(1ms, calc(900ms * var(--studio-motion-scale, 1) * var(--studio-motion-preference, 1)))\n ease-out;\n}\n\n@keyframes comments-thread-flash {\n 0%,\n 30% {\n box-shadow: 0 0 0 3px color-mix(in oklch, var(--studio-primary, #35f7ca), transparent 20%);\n }\n 100% {\n box-shadow: 0 0 0 3px transparent;\n }\n}"));
7
7
  document.head.appendChild(elementStyle);
8
8
  }
9
9
  } catch (e) {
10
10
  console.error("vite-plugin-css-injected-by-js", e);
11
11
  }
12
12
  })();
13
- import { insert, createComponent, getOwner, effect, setAttribute, template, delegateEvents, className, memo, use, render } from "solid-js/web";
13
+ import { use, insert, createComponent, setAttribute, getOwner, effect, template, delegateEvents, className, memo, render } from "solid-js/web";
14
14
  import { onCleanup, createMemo, createContext, useContext, createResource, createEffect, createSignal, onMount, createComputed, on, Show, For } from "solid-js";
15
15
  import { createStore, reconcile, produce } from "solid-js/store";
16
16
  import * as Providers from "@inkandswitch/patchwork-providers";
@@ -1152,6 +1152,27 @@ function CommentsView(props) {
1152
1152
  const [focusDoc, focusHandle] = subscribeDoc(props.element, {
1153
1153
  type: "patchwork:focus"
1154
1154
  });
1155
+ let panel;
1156
+ const viewId = `comments-view-${Math.random().toString(36).slice(2)}`;
1157
+ const [onScreen, setOnScreen] = createSignal(false);
1158
+ onMount(() => {
1159
+ const observer = new IntersectionObserver(([entry]) => setOnScreen(!!entry && entry.isIntersecting && entry.intersectionRect.width > 0));
1160
+ observer.observe(panel);
1161
+ onCleanup(() => observer.disconnect());
1162
+ });
1163
+ const listed = (shown) => {
1164
+ const handle = focusHandle();
1165
+ if (!handle) return;
1166
+ const already = !!handle.doc()?.commentViews?.[viewId];
1167
+ if (already === shown) return;
1168
+ handle.change((doc) => {
1169
+ if (!doc.commentViews) doc.commentViews = {};
1170
+ if (shown) doc.commentViews[viewId] = true;
1171
+ else delete doc.commentViews[viewId];
1172
+ });
1173
+ };
1174
+ createEffect(() => listed(onScreen()));
1175
+ onCleanup(() => listed(false));
1155
1176
  const [, contactHandle] = subscribeDoc(props.element, {
1156
1177
  type: "patchwork:contact"
1157
1178
  });
@@ -1223,9 +1244,29 @@ function CommentsView(props) {
1223
1244
  doc.highlight = desired;
1224
1245
  });
1225
1246
  });
1247
+ let pickedHere;
1248
+ createEffect(on(primaryThreadUrl, (url) => {
1249
+ if (!url || !onScreen()) return;
1250
+ if (url === pickedHere) {
1251
+ pickedHere = void 0;
1252
+ return;
1253
+ }
1254
+ const card = panel.querySelector(`.comments-thread[data-thread-url="${CSS.escape(url)}"]`);
1255
+ if (!card) return;
1256
+ card.scrollIntoView({
1257
+ block: "nearest",
1258
+ behavior: "smooth"
1259
+ });
1260
+ card.removeAttribute("data-flash");
1261
+ void card.offsetWidth;
1262
+ card.setAttribute("data-flash", "");
1263
+ }, {
1264
+ defer: true
1265
+ }));
1226
1266
  const onSelectThread = (threadUrl, targetUrls) => {
1227
1267
  const handle = focusHandle();
1228
1268
  if (!handle) return;
1269
+ pickedHere = threadUrl;
1229
1270
  const wasPrimary = primaryThreadUrl() === threadUrl;
1230
1271
  setPinnedThread(wasPrimary ? void 0 : threadUrl);
1231
1272
  const next = {};
@@ -1261,6 +1302,8 @@ function CommentsView(props) {
1261
1302
  return (() => {
1262
1303
  var _el$ = _tmpl$2$1(), _el$2 = _el$.firstChild;
1263
1304
  _el$2.firstChild;
1305
+ var _ref$ = panel;
1306
+ typeof _ref$ === "function" ? use(_ref$, _el$) : panel = _el$;
1264
1307
  insert(_el$2, createComponent(Show, {
1265
1308
  get when() {
1266
1309
  return canAddComment();
@@ -1293,6 +1336,10 @@ function CommentsView(props) {
1293
1336
  e.currentTarget.removeAttribute("data-new");
1294
1337
  }
1295
1338
  });
1339
+ _el$6.addEventListener("animationend", (e) => {
1340
+ if (e.animationName === "comments-thread-flash") e.currentTarget.removeAttribute("data-flash");
1341
+ });
1342
+ setAttribute(_el$6, "data-thread-url", threadUrl);
1296
1343
  _el$7.docUrl = threadUrl;
1297
1344
  _el$7._$owner = getOwner();
1298
1345
  effect((_p$) => {
@@ -2930,4 +2977,4 @@ export {
2930
2977
  renderCommentThread,
2931
2978
  renderCommentsView
2932
2979
  };
2933
- //# sourceMappingURL=main-DXYeEDFB.js.map
2980
+ //# sourceMappingURL=main-EQKeEvzx.js.map