@inkandswitch/patchwork-pkg-base 0.0.135 → 0.0.136

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 (54) hide show
  1. package/module-settings-url +1 -1
  2. package/package.json +1 -1
  3. package/packages/account/dist/{ContactAvatar-IVYTJ7M4.js → ContactAvatar-IL5NSSA4.js} +2 -3
  4. package/packages/account/dist/{ContactAvatar-IVYTJ7M4.js.map → ContactAvatar-IL5NSSA4.js.map} +1 -1
  5. package/packages/account/dist/{ContactCursor-2FVKF5QA.js → ContactCursor-AAYWKZQ6.js} +2 -3
  6. package/packages/account/dist/{ContactCursor-2FVKF5QA.js.map → ContactCursor-AAYWKZQ6.js.map} +1 -1
  7. package/packages/account/dist/{ContactViewer-32NVB5LB.js → ContactViewer-XSBR3IGY.js} +1 -2
  8. package/packages/account/dist/{ContactViewer-32NVB5LB.js.map → ContactViewer-XSBR3IGY.js.map} +1 -1
  9. package/packages/account/dist/{InlineContactAvatar-6UAAJ73R.js → InlineContactAvatar-IWMTGVN7.js} +1 -2
  10. package/packages/account/dist/{InlineContactAvatar-6UAAJ73R.js.map → InlineContactAvatar-IWMTGVN7.js.map} +1 -1
  11. package/packages/account/dist/{chunk-L6JWPAD3.js → chunk-3744NRLE.js} +2 -25
  12. package/packages/account/dist/{chunk-L6JWPAD3.js.map → chunk-3744NRLE.js.map} +1 -1
  13. package/packages/account/dist/{datatype-Y52FEGOW.js → datatype-TO6U5DAY.js} +1 -3
  14. package/packages/account/dist/{datatype-Y52FEGOW.js.map → datatype-TO6U5DAY.js.map} +1 -1
  15. package/packages/account/dist/index.css +0 -507
  16. package/packages/account/dist/index.css.map +3 -3
  17. package/packages/account/dist/index.js +9 -22
  18. package/packages/account/dist/index.js.map +2 -2
  19. package/packages/account/dist/{styles-KCFZAQMN.js → styles-XU34T3AI.js} +1 -3
  20. package/packages/account/dist/{styles-KCFZAQMN.js.map → styles-XU34T3AI.js.map} +1 -1
  21. package/packages/account/package.json +1 -1
  22. package/packages/codemirror-markdown/dist/extensions/markdown.js +19 -5
  23. package/packages/codemirror-markdown/dist/extensions/markdown.js.map +2 -2
  24. package/packages/settings/dist/assets/Settings-Do_cRfv4.js +3 -0
  25. package/packages/settings/dist/assets/Settings-Do_cRfv4.js.map +1 -0
  26. package/packages/settings/dist/index.js +1 -1
  27. package/packages/settings/dist/index.js.map +1 -1
  28. package/packages/settings/package.json +1 -1
  29. package/packages/sideboard/dist/account-bar-F3MXGPYB.js +2 -0
  30. package/packages/sideboard/dist/chunk-4RJIKO65.js +2 -0
  31. package/packages/sideboard/dist/chunk-4RJIKO65.js.map +7 -0
  32. package/packages/sideboard/dist/index.js +1 -1
  33. package/packages/sideboard/dist/sideboard/sideboard.js +1 -1
  34. package/packages/threepane/dist/IsolatedDocumentArea-GDW25K5U.js +2 -0
  35. package/packages/threepane/dist/PatchworkFrame-Y342MRR3.js +2 -0
  36. package/packages/threepane/dist/PatchworkFrame-Y342MRR3.js.map +7 -0
  37. package/packages/threepane/dist/{chunk-UJ7QHTY6.js → chunk-2HSAKXXA.js} +106 -7
  38. package/packages/threepane/dist/{chunk-UJ7QHTY6.js.map → chunk-2HSAKXXA.js.map} +2 -2
  39. package/packages/threepane/dist/index.js +1 -1
  40. package/plugin-registry-url +1 -1
  41. package/packages/account/dist/AccountPicker-SBCGXHRS.js +0 -7008
  42. package/packages/account/dist/AccountPicker-SBCGXHRS.js.map +0 -7
  43. package/packages/account/dist/chunk-5WRI5ZAA.js +0 -31
  44. package/packages/settings/dist/assets/FrameConfigurator-M-u9az7g.js +0 -3
  45. package/packages/settings/dist/assets/FrameConfigurator-M-u9az7g.js.map +0 -1
  46. package/packages/sideboard/dist/account-bar-6WTRIGGE.js +0 -2
  47. package/packages/sideboard/dist/chunk-JE5VBSXY.js +0 -2
  48. package/packages/sideboard/dist/chunk-JE5VBSXY.js.map +0 -7
  49. package/packages/threepane/dist/IsolatedDocumentArea-ZF6AC4GB.js +0 -2
  50. package/packages/threepane/dist/IsolatedDocumentArea-ZF6AC4GB.js.map +0 -7
  51. package/packages/threepane/dist/PatchworkFrame-SEJC7VST.js +0 -2
  52. package/packages/threepane/dist/PatchworkFrame-SEJC7VST.js.map +0 -7
  53. /package/packages/{account/dist/chunk-5WRI5ZAA.js.map → sideboard/dist/account-bar-F3MXGPYB.js.map} +0 -0
  54. /package/packages/{sideboard/dist/account-bar-6WTRIGGE.js.map → threepane/dist/IsolatedDocumentArea-GDW25K5U.js.map} +0 -0
@@ -1 +1 @@
1
- automerge:o3ynRYfyqxhBt5GS6ZEpm26Ppm8
1
+ automerge:3633yPsrgw8iUoYHwKDpMASRcmtC
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inkandswitch/patchwork-pkg-base",
3
- "version": "0.0.135",
3
+ "version": "0.0.136",
4
4
  "type": "module",
5
5
  "description": "Base packages for the Patchwork system",
6
6
  "repository": {
@@ -6,8 +6,7 @@ import {
6
6
  } from "./chunk-PLRZBPU4.js";
7
7
  import {
8
8
  themedColor
9
- } from "./chunk-L6JWPAD3.js";
10
- import "./chunk-5WRI5ZAA.js";
9
+ } from "./chunk-3744NRLE.js";
11
10
 
12
11
  // src/contact/ContactAvatar.ts
13
12
  import { getImportableUrlFromAutomergeUrl } from "@inkandswitch/patchwork-filesystem";
@@ -109,4 +108,4 @@ function renderContactAvatar(handle, element) {
109
108
  export {
110
109
  renderContactAvatar
111
110
  };
112
- //# sourceMappingURL=ContactAvatar-IVYTJ7M4.js.map
111
+ //# sourceMappingURL=ContactAvatar-IL5NSSA4.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/contact/ContactAvatar.ts"],
4
4
  "sourcesContent": ["import type { AutomergeUrl, DocHandle } from \"@automerge/automerge-repo/slim\";\nimport type { ToolElement } from \"@inkandswitch/patchwork-plugins\";\nimport type { ContactDoc } from \"../types\";\nimport { themedColor } from \"../user-colors\";\nimport { createAvatar, setAvatarImage, setAvatarFallback, getInitials } from \"./Avatar\";\nimport { getImportableUrlFromAutomergeUrl } from \"@inkandswitch/patchwork-filesystem\";\nimport { subscribe } from \"@inkandswitch/patchwork-providers\";\n\ndeclare global {\n interface Window {\n accountDocHandle?: { url: AutomergeUrl };\n }\n}\n\ntype TinyPatchworkLayoutDoc = {\n contactUrl: AutomergeUrl;\n};\n\nexport function renderContactAvatar(\n handle: DocHandle<ContactDoc>,\n element: ToolElement\n) {\n const avatar = createAvatar(\"default\");\n element.appendChild(avatar);\n\n let selfName = \"me\";\n const cleanups: (() => void)[] = [];\n\n // Track presence via ephemeral messages\n const heartbeats: Record<string, number> = {};\n let presenceTimer: ReturnType<typeof setInterval>;\n\n function onEphemeralMessage(message: { senderId: string; message: unknown }) {\n // useRemoteAwareness tracks heartbeats from ephemeral messages\n if (message.senderId) {\n heartbeats[message.senderId] = Date.now();\n }\n updatePresence();\n }\n\n function updatePresence() {\n const now = Date.now();\n const timeout = 30000;\n const isPresent = Object.entries(heartbeats).some(\n ([id, ts]) => id !== selfName && now - ts < timeout\n );\n\n // The contact's chosen color; without one, the CSS fallback (neutral\n // gray) applies.\n const userColor = handle.doc()?.color;\n\n if (isPresent) {\n avatar.classList.add(\"contact-avatar--present\");\n if (userColor) {\n avatar.style.setProperty(\"--contact-presence-color\", themedColor(userColor));\n } else {\n avatar.style.removeProperty(\"--contact-presence-color\");\n }\n } else {\n avatar.classList.remove(\"contact-avatar--present\");\n avatar.style.removeProperty(\"--contact-presence-color\");\n }\n }\n\n handle.on(\"ephemeral-message\", onEphemeralMessage);\n cleanups.push(() => handle.off(\"ephemeral-message\", onEphemeralMessage));\n\n // Periodically clean up stale heartbeats\n presenceTimer = setInterval(updatePresence, 5000);\n cleanups.push(() => clearInterval(presenceTimer));\n\n // Get own contact via provider subscription\n const unsubscribe = subscribe<string>(\n element,\n { type: \"patchwork:contact\" },\n (contactUrl) => {\n element.repo\n .find<ContactDoc>(contactUrl as AutomergeUrl)\n .then((selfHandle) => {\n const selfDoc = selfHandle.doc();\n if (selfDoc?.type === \"registered\") {\n selfName = selfDoc.name;\n }\n });\n }\n );\n cleanups.push(unsubscribe);\n\n // Fallback: use window.accountDocHandle\n if (window.accountDocHandle) {\n element.repo\n .find<TinyPatchworkLayoutDoc>(window.accountDocHandle.url)\n .then((accountHandle) => {\n const accountDoc = accountHandle.doc();\n if (accountDoc?.contactUrl) {\n element.repo\n .find<ContactDoc>(accountDoc.contactUrl)\n .then((selfHandle) => {\n const selfDoc = selfHandle.doc();\n if (selfDoc?.type === \"registered\") {\n selfName = selfDoc.name;\n }\n });\n }\n });\n }\n\n async function update() {\n const contact = handle.doc();\n if (!contact) {\n avatar.style.display = \"none\";\n return;\n }\n avatar.style.display = \"\";\n\n const isRegistered = contact.type === \"registered\";\n const name = isRegistered ? contact.name : \"Anonymous\";\n\n // avatar image\n let avatarImgUrl: string | undefined;\n if (isRegistered && contact.avatarUrl) {\n try {\n const avatarHandle = await element.repo.find(contact.avatarUrl);\n avatarImgUrl = getImportableUrlFromAutomergeUrl(avatarHandle.url);\n } catch {\n // ignore failed avatar lookup\n }\n }\n setAvatarImage(avatar, avatarImgUrl, name);\n\n // fallback\n if (isRegistered && name) {\n setAvatarFallback(avatar, { initials: getInitials(name) });\n } else {\n setAvatarFallback(avatar, { iconSize: 20 });\n }\n\n updatePresence();\n }\n\n handle.on(\"change\", update);\n cleanups.push(() => handle.off(\"change\", update));\n update();\n\n return () => {\n for (const cleanup of cleanups) cleanup();\n };\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,6 @@
1
1
  import {
2
2
  themedColor
3
- } from "./chunk-L6JWPAD3.js";
4
- import "./chunk-5WRI5ZAA.js";
3
+ } from "./chunk-3744NRLE.js";
5
4
 
6
5
  // src/contact/ContactCursor.ts
7
6
  function renderContactCursor(handle, element) {
@@ -34,4 +33,4 @@ function renderContactCursor(handle, element) {
34
33
  export {
35
34
  renderContactCursor
36
35
  };
37
- //# sourceMappingURL=ContactCursor-2FVKF5QA.js.map
36
+ //# sourceMappingURL=ContactCursor-AAYWKZQ6.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/contact/ContactCursor.ts"],
4
4
  "sourcesContent": ["import type { DocHandle } from \"@automerge/automerge-repo/slim\";\nimport type { ToolElement } from \"@inkandswitch/patchwork-plugins\";\nimport type { ContactDoc } from \"../types\";\nimport { themedColor } from \"../user-colors\";\n\n/**\n * A compact cursor token: the contact's name on a pill in their presence\n * color. Hosts that render remote cursors (text editors, canvases) mount it\n * next to their own cursor primitive (caret line, pointer arrow) via\n * `<patchwork-view doc-url={contactUrl} tool-id=\"contact-cursor\">`.\n */\nexport function renderContactCursor(\n handle: DocHandle<ContactDoc>,\n element: ToolElement\n) {\n const token = document.createElement(\"div\");\n token.className = \"contact-cursor-token\";\n element.appendChild(token);\n\n function update() {\n const contact = handle.doc();\n if (!contact) {\n token.style.display = \"none\";\n return;\n }\n token.style.display = \"\";\n const name = contact.type === \"registered\" ? contact.name : \"Anonymous\";\n // The contact's chosen color; without one, the CSS fallback (neutral\n // gray) applies.\n if (contact.color) {\n token.style.setProperty(\"--contact-cursor-color\", themedColor(contact.color));\n } else {\n token.style.removeProperty(\"--contact-cursor-color\");\n }\n token.textContent = name;\n token.title = name;\n }\n\n handle.on(\"change\", update);\n update();\n\n return () => {\n handle.off(\"change\", update);\n token.remove();\n };\n}\n"],
5
- "mappings": ";;;;;;AAWO,SAAS,oBACd,QACA,SACA;AACA,QAAM,QAAQ,SAAS,cAAc,KAAK;AAC1C,QAAM,YAAY;AAClB,UAAQ,YAAY,KAAK;AAEzB,WAAS,SAAS;AAChB,UAAM,UAAU,OAAO,IAAI;AAC3B,QAAI,CAAC,SAAS;AACZ,YAAM,MAAM,UAAU;AACtB;AAAA,IACF;AACA,UAAM,MAAM,UAAU;AACtB,UAAM,OAAO,QAAQ,SAAS,eAAe,QAAQ,OAAO;AAG5D,QAAI,QAAQ,OAAO;AACjB,YAAM,MAAM,YAAY,0BAA0B,YAAY,QAAQ,KAAK,CAAC;AAAA,IAC9E,OAAO;AACL,YAAM,MAAM,eAAe,wBAAwB;AAAA,IACrD;AACA,UAAM,cAAc;AACpB,UAAM,QAAQ;AAAA,EAChB;AAEA,SAAO,GAAG,UAAU,MAAM;AAC1B,SAAO;AAEP,SAAO,MAAM;AACX,WAAO,IAAI,UAAU,MAAM;AAC3B,UAAM,OAAO;AAAA,EACf;AACF;",
5
+ "mappings": ";;;;;AAWO,SAAS,oBACd,QACA,SACA;AACA,QAAM,QAAQ,SAAS,cAAc,KAAK;AAC1C,QAAM,YAAY;AAClB,UAAQ,YAAY,KAAK;AAEzB,WAAS,SAAS;AAChB,UAAM,UAAU,OAAO,IAAI;AAC3B,QAAI,CAAC,SAAS;AACZ,YAAM,MAAM,UAAU;AACtB;AAAA,IACF;AACA,UAAM,MAAM,UAAU;AACtB,UAAM,OAAO,QAAQ,SAAS,eAAe,QAAQ,OAAO;AAG5D,QAAI,QAAQ,OAAO;AACjB,YAAM,MAAM,YAAY,0BAA0B,YAAY,QAAQ,KAAK,CAAC;AAAA,IAC9E,OAAO;AACL,YAAM,MAAM,eAAe,wBAAwB;AAAA,IACrD;AACA,UAAM,cAAc;AACpB,UAAM,QAAQ;AAAA,EAChB;AAEA,SAAO,GAAG,UAAU,MAAM;AAC1B,SAAO;AAEP,SAAO,MAAM;AACX,WAAO,IAAI,UAAU,MAAM;AAC3B,UAAM,OAAO;AAAA,EACf;AACF;",
6
6
  "names": []
7
7
  }
@@ -4,7 +4,6 @@ import {
4
4
  setAvatarFallback,
5
5
  setAvatarImage
6
6
  } from "./chunk-PLRZBPU4.js";
7
- import "./chunk-5WRI5ZAA.js";
8
7
 
9
8
  // src/contact/ContactViewer.ts
10
9
  import { automergeUrlToServiceWorkerUrl } from "@inkandswitch/patchwork-filesystem";
@@ -58,4 +57,4 @@ function renderContactViewer(handle, element) {
58
57
  export {
59
58
  renderContactViewer
60
59
  };
61
- //# sourceMappingURL=ContactViewer-32NVB5LB.js.map
60
+ //# sourceMappingURL=ContactViewer-XSBR3IGY.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/contact/ContactViewer.ts"],
4
4
  "sourcesContent": ["import type { DocHandle } from \"@automerge/automerge-repo/slim\";\nimport type { ToolElement } from \"@inkandswitch/patchwork-plugins\";\nimport type { ContactDoc } from \"../types\";\nimport { createAvatar, setAvatarImage, setAvatarFallback, getInitials } from \"./Avatar\";\nimport { automergeUrlToServiceWorkerUrl } from \"@inkandswitch/patchwork-filesystem\";\n\nexport function renderContactViewer(\n handle: DocHandle<ContactDoc>,\n element: ToolElement\n) {\n const wrapper = document.createElement(\"div\");\n wrapper.className = \"contact-viewer\";\n\n const avatar = createAvatar(\"lg\");\n const nameEl = document.createElement(\"h2\");\n nameEl.className = \"contact-viewer-name\";\n const labelEl = document.createElement(\"p\");\n labelEl.className = \"contact-viewer-label\";\n labelEl.textContent = \"Unregistered user\";\n\n wrapper.append(avatar, nameEl);\n element.appendChild(wrapper);\n\n async function update() {\n const contact = handle.doc();\n if (!contact) {\n wrapper.style.display = \"none\";\n return;\n }\n wrapper.style.display = \"\";\n\n const isRegistered = contact.type === \"registered\";\n const name = isRegistered ? contact.name : \"Anonymous\";\n\n nameEl.textContent = name;\n\n // avatar image\n let avatarImgUrl: string | undefined;\n if (isRegistered && contact.avatarUrl) {\n try {\n const avatarHandle = await element.repo.find(contact.avatarUrl);\n avatarImgUrl = automergeUrlToServiceWorkerUrl(avatarHandle.url);\n } catch {\n // ignore failed avatar lookup\n }\n }\n setAvatarImage(avatar, avatarImgUrl, name);\n\n // fallback\n if (isRegistered && name) {\n setAvatarFallback(avatar, { initials: getInitials(name) });\n } else {\n setAvatarFallback(avatar, { iconSize: 32 });\n }\n\n // label\n if (!isRegistered) {\n if (!wrapper.contains(labelEl)) wrapper.appendChild(labelEl);\n } else {\n labelEl.remove();\n }\n }\n\n handle.on(\"change\", update);\n update();\n\n return () => {\n handle.off(\"change\", update);\n };\n}\n"],
5
- "mappings": ";;;;;;;;;AAIA,SAAS,sCAAsC;AAExC,SAAS,oBACd,QACA,SACA;AACA,QAAM,UAAU,SAAS,cAAc,KAAK;AAC5C,UAAQ,YAAY;AAEpB,QAAM,SAAS,aAAa,IAAI;AAChC,QAAM,SAAS,SAAS,cAAc,IAAI;AAC1C,SAAO,YAAY;AACnB,QAAM,UAAU,SAAS,cAAc,GAAG;AAC1C,UAAQ,YAAY;AACpB,UAAQ,cAAc;AAEtB,UAAQ,OAAO,QAAQ,MAAM;AAC7B,UAAQ,YAAY,OAAO;AAE3B,iBAAe,SAAS;AACtB,UAAM,UAAU,OAAO,IAAI;AAC3B,QAAI,CAAC,SAAS;AACZ,cAAQ,MAAM,UAAU;AACxB;AAAA,IACF;AACA,YAAQ,MAAM,UAAU;AAExB,UAAM,eAAe,QAAQ,SAAS;AACtC,UAAM,OAAO,eAAe,QAAQ,OAAO;AAE3C,WAAO,cAAc;AAGrB,QAAI;AACJ,QAAI,gBAAgB,QAAQ,WAAW;AACrC,UAAI;AACF,cAAM,eAAe,MAAM,QAAQ,KAAK,KAAK,QAAQ,SAAS;AAC9D,uBAAe,+BAA+B,aAAa,GAAG;AAAA,MAChE,QAAQ;AAAA,MAER;AAAA,IACF;AACA,mBAAe,QAAQ,cAAc,IAAI;AAGzC,QAAI,gBAAgB,MAAM;AACxB,wBAAkB,QAAQ,EAAE,UAAU,YAAY,IAAI,EAAE,CAAC;AAAA,IAC3D,OAAO;AACL,wBAAkB,QAAQ,EAAE,UAAU,GAAG,CAAC;AAAA,IAC5C;AAGA,QAAI,CAAC,cAAc;AACjB,UAAI,CAAC,QAAQ,SAAS,OAAO,EAAG,SAAQ,YAAY,OAAO;AAAA,IAC7D,OAAO;AACL,cAAQ,OAAO;AAAA,IACjB;AAAA,EACF;AAEA,SAAO,GAAG,UAAU,MAAM;AAC1B,SAAO;AAEP,SAAO,MAAM;AACX,WAAO,IAAI,UAAU,MAAM;AAAA,EAC7B;AACF;",
5
+ "mappings": ";;;;;;;;AAIA,SAAS,sCAAsC;AAExC,SAAS,oBACd,QACA,SACA;AACA,QAAM,UAAU,SAAS,cAAc,KAAK;AAC5C,UAAQ,YAAY;AAEpB,QAAM,SAAS,aAAa,IAAI;AAChC,QAAM,SAAS,SAAS,cAAc,IAAI;AAC1C,SAAO,YAAY;AACnB,QAAM,UAAU,SAAS,cAAc,GAAG;AAC1C,UAAQ,YAAY;AACpB,UAAQ,cAAc;AAEtB,UAAQ,OAAO,QAAQ,MAAM;AAC7B,UAAQ,YAAY,OAAO;AAE3B,iBAAe,SAAS;AACtB,UAAM,UAAU,OAAO,IAAI;AAC3B,QAAI,CAAC,SAAS;AACZ,cAAQ,MAAM,UAAU;AACxB;AAAA,IACF;AACA,YAAQ,MAAM,UAAU;AAExB,UAAM,eAAe,QAAQ,SAAS;AACtC,UAAM,OAAO,eAAe,QAAQ,OAAO;AAE3C,WAAO,cAAc;AAGrB,QAAI;AACJ,QAAI,gBAAgB,QAAQ,WAAW;AACrC,UAAI;AACF,cAAM,eAAe,MAAM,QAAQ,KAAK,KAAK,QAAQ,SAAS;AAC9D,uBAAe,+BAA+B,aAAa,GAAG;AAAA,MAChE,QAAQ;AAAA,MAER;AAAA,IACF;AACA,mBAAe,QAAQ,cAAc,IAAI;AAGzC,QAAI,gBAAgB,MAAM;AACxB,wBAAkB,QAAQ,EAAE,UAAU,YAAY,IAAI,EAAE,CAAC;AAAA,IAC3D,OAAO;AACL,wBAAkB,QAAQ,EAAE,UAAU,GAAG,CAAC;AAAA,IAC5C;AAGA,QAAI,CAAC,cAAc;AACjB,UAAI,CAAC,QAAQ,SAAS,OAAO,EAAG,SAAQ,YAAY,OAAO;AAAA,IAC7D,OAAO;AACL,cAAQ,OAAO;AAAA,IACjB;AAAA,EACF;AAEA,SAAO,GAAG,UAAU,MAAM;AAC1B,SAAO;AAEP,SAAO,MAAM;AACX,WAAO,IAAI,UAAU,MAAM;AAAA,EAC7B;AACF;",
6
6
  "names": []
7
7
  }
@@ -4,7 +4,6 @@ import {
4
4
  setAvatarFallback,
5
5
  setAvatarImage
6
6
  } from "./chunk-PLRZBPU4.js";
7
- import "./chunk-5WRI5ZAA.js";
8
7
 
9
8
  // src/contact/InlineContactAvatar.ts
10
9
  import { automergeUrlToServiceWorkerUrl } from "@inkandswitch/patchwork-filesystem";
@@ -45,4 +44,4 @@ function renderInlineContactAvatar(handle, element) {
45
44
  export {
46
45
  renderInlineContactAvatar
47
46
  };
48
- //# sourceMappingURL=InlineContactAvatar-6UAAJ73R.js.map
47
+ //# sourceMappingURL=InlineContactAvatar-IWMTGVN7.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/contact/InlineContactAvatar.ts"],
4
4
  "sourcesContent": ["import type { DocHandle } from \"@automerge/automerge-repo/slim\";\nimport type { ToolElement } from \"@inkandswitch/patchwork-plugins\";\nimport type { ContactDoc } from \"../types\";\nimport { createAvatar, setAvatarImage, setAvatarFallback, getInitials } from \"./Avatar\";\nimport { automergeUrlToServiceWorkerUrl } from \"@inkandswitch/patchwork-filesystem\";\n\nexport function renderInlineContactAvatar(\n handle: DocHandle<ContactDoc>,\n element: ToolElement\n) {\n const avatar = createAvatar(\"sm\");\n element.appendChild(avatar);\n\n async function update() {\n const contact = handle.doc();\n if (!contact) {\n avatar.style.display = \"none\";\n return;\n }\n avatar.style.display = \"\";\n\n const isRegistered = contact.type === \"registered\";\n const name = isRegistered ? contact.name : \"Anonymous\";\n avatar.title = name;\n\n // avatar image\n let avatarImgUrl: string | undefined;\n if (isRegistered && contact.avatarUrl) {\n try {\n const avatarHandle = await element.repo.find(contact.avatarUrl);\n avatarImgUrl = automergeUrlToServiceWorkerUrl(avatarHandle.url);\n } catch {\n // ignore failed avatar lookup\n }\n }\n setAvatarImage(avatar, avatarImgUrl, name);\n\n // fallback\n if (isRegistered && name) {\n setAvatarFallback(avatar, { initials: getInitials(name) });\n } else {\n setAvatarFallback(avatar, { iconSize: 16 });\n }\n }\n\n handle.on(\"change\", update);\n update();\n\n return () => {\n handle.off(\"change\", update);\n };\n}\n"],
5
- "mappings": ";;;;;;;;;AAIA,SAAS,sCAAsC;AAExC,SAAS,0BACd,QACA,SACA;AACA,QAAM,SAAS,aAAa,IAAI;AAChC,UAAQ,YAAY,MAAM;AAE1B,iBAAe,SAAS;AACtB,UAAM,UAAU,OAAO,IAAI;AAC3B,QAAI,CAAC,SAAS;AACZ,aAAO,MAAM,UAAU;AACvB;AAAA,IACF;AACA,WAAO,MAAM,UAAU;AAEvB,UAAM,eAAe,QAAQ,SAAS;AACtC,UAAM,OAAO,eAAe,QAAQ,OAAO;AAC3C,WAAO,QAAQ;AAGf,QAAI;AACJ,QAAI,gBAAgB,QAAQ,WAAW;AACrC,UAAI;AACF,cAAM,eAAe,MAAM,QAAQ,KAAK,KAAK,QAAQ,SAAS;AAC9D,uBAAe,+BAA+B,aAAa,GAAG;AAAA,MAChE,QAAQ;AAAA,MAER;AAAA,IACF;AACA,mBAAe,QAAQ,cAAc,IAAI;AAGzC,QAAI,gBAAgB,MAAM;AACxB,wBAAkB,QAAQ,EAAE,UAAU,YAAY,IAAI,EAAE,CAAC;AAAA,IAC3D,OAAO;AACL,wBAAkB,QAAQ,EAAE,UAAU,GAAG,CAAC;AAAA,IAC5C;AAAA,EACF;AAEA,SAAO,GAAG,UAAU,MAAM;AAC1B,SAAO;AAEP,SAAO,MAAM;AACX,WAAO,IAAI,UAAU,MAAM;AAAA,EAC7B;AACF;",
5
+ "mappings": ";;;;;;;;AAIA,SAAS,sCAAsC;AAExC,SAAS,0BACd,QACA,SACA;AACA,QAAM,SAAS,aAAa,IAAI;AAChC,UAAQ,YAAY,MAAM;AAE1B,iBAAe,SAAS;AACtB,UAAM,UAAU,OAAO,IAAI;AAC3B,QAAI,CAAC,SAAS;AACZ,aAAO,MAAM,UAAU;AACvB;AAAA,IACF;AACA,WAAO,MAAM,UAAU;AAEvB,UAAM,eAAe,QAAQ,SAAS;AACtC,UAAM,OAAO,eAAe,QAAQ,OAAO;AAC3C,WAAO,QAAQ;AAGf,QAAI;AACJ,QAAI,gBAAgB,QAAQ,WAAW;AACrC,UAAI;AACF,cAAM,eAAe,MAAM,QAAQ,KAAK,KAAK,QAAQ,SAAS;AAC9D,uBAAe,+BAA+B,aAAa,GAAG;AAAA,MAChE,QAAQ;AAAA,MAER;AAAA,IACF;AACA,mBAAe,QAAQ,cAAc,IAAI;AAGzC,QAAI,gBAAgB,MAAM;AACxB,wBAAkB,QAAQ,EAAE,UAAU,YAAY,IAAI,EAAE,CAAC;AAAA,IAC3D,OAAO;AACL,wBAAkB,QAAQ,EAAE,UAAU,GAAG,CAAC;AAAA,IAC5C;AAAA,EACF;AAEA,SAAO,GAAG,UAAU,MAAM;AAC1B,SAAO;AAEP,SAAO,MAAM;AACX,WAAO,IAAI,UAAU,MAAM;AAAA,EAC7B;AACF;",
6
6
  "names": []
7
7
  }
@@ -22,31 +22,8 @@ function themedColor(color) {
22
22
  const token = TOKENS.get(squash(color));
23
23
  return token ? `var(${token}, ${color})` : color;
24
24
  }
25
- function generateColorFromString(str) {
26
- const hash = Math.abs(
27
- str.split("").reduce((acc, char) => acc + char.charCodeAt(0), 0)
28
- );
29
- const colorIndex = hash % USER_COLOR_PALETTE.length;
30
- return USER_COLOR_PALETTE[colorIndex].value;
31
- }
32
- function getRandomUserColor() {
33
- return USER_COLOR_PALETTE[Math.floor(Math.random() * USER_COLOR_PALETTE.length)].value;
34
- }
35
- function parseHslColor(color) {
36
- const match = color.match(/^hsl\(\s*(\d+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*\)$/);
37
- if (!match) return null;
38
- return {
39
- h: parseInt(match[1], 10),
40
- s: parseInt(match[2], 10),
41
- l: parseInt(match[3], 10)
42
- };
43
- }
44
25
 
45
26
  export {
46
- USER_COLOR_PALETTE,
47
- themedColor,
48
- generateColorFromString,
49
- getRandomUserColor,
50
- parseHslColor
27
+ themedColor
51
28
  };
52
- //# sourceMappingURL=chunk-L6JWPAD3.js.map
29
+ //# sourceMappingURL=chunk-3744NRLE.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/user-colors.ts"],
4
4
  "sourcesContent": ["/**\n * User color palette for presence indicators (cursors, avatars, etc.)\n *\n * Colors are selected to:\n * - Be easily distinguishable from each other\n * - Work well on both light and dark backgrounds\n * - Be accessible and readable\n * - Look professional and modern\n */\n\nexport const USER_COLOR_PALETTE = [\n { name: \"Sky Blue\", value: \"hsl(200, 70%, 50%)\" },\n { name: \"Coral\", value: \"hsl(10, 75%, 58%)\" },\n { name: \"Emerald\", value: \"hsl(145, 70%, 45%)\" },\n { name: \"Violet\", value: \"hsl(270, 70%, 55%)\" },\n { name: \"Amber\", value: \"hsl(38, 85%, 50%)\" },\n { name: \"Rose\", value: \"hsl(350, 70%, 55%)\" },\n { name: \"Teal\", value: \"hsl(178, 70%, 45%)\" },\n { name: \"Indigo\", value: \"hsl(235, 70%, 58%)\" },\n { name: \"Lime\", value: \"hsl(85, 70%, 45%)\" },\n { name: \"Fuchsia\", value: \"hsl(310, 70%, 55%)\" },\n { name: \"Orange\", value: \"hsl(25, 80%, 52%)\" },\n { name: \"Cyan\", value: \"hsl(188, 75%, 48%)\" },\n] as const;\n\n/** \"Sky Blue\" \u2192 \"sky-blue\": the palette colour's theme token suffix. */\nconst slug = (name: string) => name.toLowerCase().replace(/\\s+/g, \"-\");\nconst squash = (color: string) => color.replace(/\\s+/g, \"\").toLowerCase();\nconst TOKENS = new Map(\n USER_COLOR_PALETTE.map((c) => [squash(c.value), `--studio-presence-${slug(c.name)}`])\n);\n\n/**\n * A contact colour as it should be drawn: a palette colour becomes its theme\n * token (`--studio-presence-sky-blue`, see theming's theme.css), falling back\n * to the stored value, so a theme can restyle everyone's colours. Any other\n * colour (picked with the custom picker) is drawn as it is.\n */\nexport function themedColor(color: string): string {\n const token = TOKENS.get(squash(color));\n return token ? `var(${token}, ${color})` : color;\n}\n\n/**\n * Generate a deterministic color from a string (like a contact url).\n * Only used to seed `contact.color` at signup -- presence rendering never\n * derives colors, it reads `contact.color` from the account.\n */\nexport function generateColorFromString(str: string): string {\n const hash = Math.abs(\n str.split(\"\").reduce((acc, char) => acc + char.charCodeAt(0), 0)\n );\n const colorIndex = hash % USER_COLOR_PALETTE.length;\n return USER_COLOR_PALETTE[colorIndex].value;\n}\n\n/**\n * Get a default color for a user (picks from palette based on index)\n */\nexport function getDefaultUserColor(index: number): string {\n return USER_COLOR_PALETTE[index % USER_COLOR_PALETTE.length].value;\n}\n\nexport function getRandomUserColor(): string {\n return USER_COLOR_PALETTE[\n Math.floor(Math.random() * USER_COLOR_PALETTE.length)\n ].value;\n}\n\n/**\n * Validate if a string is a valid HSL color\n */\nexport function isValidHslColor(color: string): boolean {\n return /^hsl\\(\\s*\\d+\\s*,\\s*\\d+%\\s*,\\s*\\d+%\\s*\\)$/.test(color);\n}\n\n/**\n * Parse HSL values from a color string\n */\nexport function parseHslColor(\n color: string\n): { h: number; s: number; l: number } | null {\n const match = color.match(/^hsl\\(\\s*(\\d+)\\s*,\\s*(\\d+)%\\s*,\\s*(\\d+)%\\s*\\)$/);\n if (!match) return null;\n return {\n h: parseInt(match[1], 10),\n s: parseInt(match[2], 10),\n l: parseInt(match[3], 10),\n };\n}\n\n/**\n * Create an HSL color string from values\n */\nexport function createHslColor(h: number, s: number, l: number): string {\n return `hsl(${h}, ${s}%, ${l}%)`;\n}\n"],
5
- "mappings": ";AAUO,IAAM,qBAAqB;AAAA,EAChC,EAAE,MAAM,YAAY,OAAO,qBAAqB;AAAA,EAChD,EAAE,MAAM,SAAS,OAAO,oBAAoB;AAAA,EAC5C,EAAE,MAAM,WAAW,OAAO,qBAAqB;AAAA,EAC/C,EAAE,MAAM,UAAU,OAAO,qBAAqB;AAAA,EAC9C,EAAE,MAAM,SAAS,OAAO,oBAAoB;AAAA,EAC5C,EAAE,MAAM,QAAQ,OAAO,qBAAqB;AAAA,EAC5C,EAAE,MAAM,QAAQ,OAAO,qBAAqB;AAAA,EAC5C,EAAE,MAAM,UAAU,OAAO,qBAAqB;AAAA,EAC9C,EAAE,MAAM,QAAQ,OAAO,oBAAoB;AAAA,EAC3C,EAAE,MAAM,WAAW,OAAO,qBAAqB;AAAA,EAC/C,EAAE,MAAM,UAAU,OAAO,oBAAoB;AAAA,EAC7C,EAAE,MAAM,QAAQ,OAAO,qBAAqB;AAC9C;AAGA,IAAM,OAAO,CAAC,SAAiB,KAAK,YAAY,EAAE,QAAQ,QAAQ,GAAG;AACrE,IAAM,SAAS,CAAC,UAAkB,MAAM,QAAQ,QAAQ,EAAE,EAAE,YAAY;AACxE,IAAM,SAAS,IAAI;AAAA,EACjB,mBAAmB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,GAAG,qBAAqB,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;AACtF;AAQO,SAAS,YAAY,OAAuB;AACjD,QAAM,QAAQ,OAAO,IAAI,OAAO,KAAK,CAAC;AACtC,SAAO,QAAQ,OAAO,KAAK,KAAK,KAAK,MAAM;AAC7C;AAOO,SAAS,wBAAwB,KAAqB;AAC3D,QAAM,OAAO,KAAK;AAAA,IAChB,IAAI,MAAM,EAAE,EAAE,OAAO,CAAC,KAAK,SAAS,MAAM,KAAK,WAAW,CAAC,GAAG,CAAC;AAAA,EACjE;AACA,QAAM,aAAa,OAAO,mBAAmB;AAC7C,SAAO,mBAAmB,UAAU,EAAE;AACxC;AASO,SAAS,qBAA6B;AAC3C,SAAO,mBACL,KAAK,MAAM,KAAK,OAAO,IAAI,mBAAmB,MAAM,CACtD,EAAE;AACJ;AAYO,SAAS,cACd,OAC4C;AAC5C,QAAM,QAAQ,MAAM,MAAM,gDAAgD;AAC1E,MAAI,CAAC,MAAO,QAAO;AACnB,SAAO;AAAA,IACL,GAAG,SAAS,MAAM,CAAC,GAAG,EAAE;AAAA,IACxB,GAAG,SAAS,MAAM,CAAC,GAAG,EAAE;AAAA,IACxB,GAAG,SAAS,MAAM,CAAC,GAAG,EAAE;AAAA,EAC1B;AACF;",
5
+ "mappings": ";AAUO,IAAM,qBAAqB;AAAA,EAChC,EAAE,MAAM,YAAY,OAAO,qBAAqB;AAAA,EAChD,EAAE,MAAM,SAAS,OAAO,oBAAoB;AAAA,EAC5C,EAAE,MAAM,WAAW,OAAO,qBAAqB;AAAA,EAC/C,EAAE,MAAM,UAAU,OAAO,qBAAqB;AAAA,EAC9C,EAAE,MAAM,SAAS,OAAO,oBAAoB;AAAA,EAC5C,EAAE,MAAM,QAAQ,OAAO,qBAAqB;AAAA,EAC5C,EAAE,MAAM,QAAQ,OAAO,qBAAqB;AAAA,EAC5C,EAAE,MAAM,UAAU,OAAO,qBAAqB;AAAA,EAC9C,EAAE,MAAM,QAAQ,OAAO,oBAAoB;AAAA,EAC3C,EAAE,MAAM,WAAW,OAAO,qBAAqB;AAAA,EAC/C,EAAE,MAAM,UAAU,OAAO,oBAAoB;AAAA,EAC7C,EAAE,MAAM,QAAQ,OAAO,qBAAqB;AAC9C;AAGA,IAAM,OAAO,CAAC,SAAiB,KAAK,YAAY,EAAE,QAAQ,QAAQ,GAAG;AACrE,IAAM,SAAS,CAAC,UAAkB,MAAM,QAAQ,QAAQ,EAAE,EAAE,YAAY;AACxE,IAAM,SAAS,IAAI;AAAA,EACjB,mBAAmB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,GAAG,qBAAqB,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;AACtF;AAQO,SAAS,YAAY,OAAuB;AACjD,QAAM,QAAQ,OAAO,IAAI,OAAO,KAAK,CAAC;AACtC,SAAO,QAAQ,OAAO,KAAK,KAAK,KAAK,MAAM;AAC7C;",
6
6
  "names": []
7
7
  }
@@ -1,5 +1,3 @@
1
- import "./chunk-5WRI5ZAA.js";
2
-
3
1
  // src/contact/datatype.ts
4
2
  var init = (doc) => {
5
3
  Object.assign(doc, {
@@ -26,4 +24,4 @@ export {
26
24
  ContactDatatype,
27
25
  init
28
26
  };
29
- //# sourceMappingURL=datatype-Y52FEGOW.js.map
27
+ //# sourceMappingURL=datatype-TO6U5DAY.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/contact/datatype.ts"],
4
4
  "sourcesContent": ["import { type DatatypeImplementation } from \"@inkandswitch/patchwork-plugins\";\nimport type { ContactDoc } from \"../types\";\n\nexport const init = (doc: ContactDoc) => {\n Object.assign(doc, {\n type: \"anonymous\",\n } as ContactDoc);\n};\n\nconst getTitle = (doc: ContactDoc) => {\n if (doc.type === \"registered\") {\n return doc.name;\n }\n return \"Anonymous\";\n};\n\nconst setTitle = (doc: ContactDoc, title: string) => {\n if (doc.type === \"registered\") {\n doc.name = title;\n }\n};\n\nexport const ContactDatatype: DatatypeImplementation<ContactDoc> = {\n init,\n getTitle,\n setTitle,\n};\n"],
5
- "mappings": ";;;AAGO,IAAM,OAAO,CAAC,QAAoB;AACvC,SAAO,OAAO,KAAK;AAAA,IACjB,MAAM;AAAA,EACR,CAAe;AACjB;AAEA,IAAM,WAAW,CAAC,QAAoB;AACpC,MAAI,IAAI,SAAS,cAAc;AAC7B,WAAO,IAAI;AAAA,EACb;AACA,SAAO;AACT;AAEA,IAAM,WAAW,CAAC,KAAiB,UAAkB;AACnD,MAAI,IAAI,SAAS,cAAc;AAC7B,QAAI,OAAO;AAAA,EACb;AACF;AAEO,IAAM,kBAAsD;AAAA,EACjE;AAAA,EACA;AAAA,EACA;AACF;",
5
+ "mappings": ";AAGO,IAAM,OAAO,CAAC,QAAoB;AACvC,SAAO,OAAO,KAAK;AAAA,IACjB,MAAM;AAAA,EACR,CAAe;AACjB;AAEA,IAAM,WAAW,CAAC,QAAoB;AACpC,MAAI,IAAI,SAAS,cAAc;AAC7B,WAAO,IAAI;AAAA,EACb;AACA,SAAO;AACT;AAEA,IAAM,WAAW,CAAC,KAAiB,UAAkB;AACnD,MAAI,IAAI,SAAS,cAAc;AAC7B,QAAI,OAAO;AAAA,EACb;AACF;AAEO,IAAM,kBAAsD;AAAA,EACjE;AAAA,EACA;AAAA,EACA;AACF;",
6
6
  "names": []
7
7
  }