@mieweb/ui 0.7.1-dev.6 → 0.7.1-dev.8

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 (34) hide show
  1. package/dist/brands/index.cjs +7 -7
  2. package/dist/brands/index.js +2 -2
  3. package/dist/{chunk-Y3ZZEDIU.js → chunk-2YDKLURF.js} +25 -2
  4. package/dist/chunk-2YDKLURF.js.map +1 -0
  5. package/dist/chunk-3MGHTTZW.js +487 -0
  6. package/dist/chunk-3MGHTTZW.js.map +1 -0
  7. package/dist/{chunk-VIWEV6TJ.cjs → chunk-3OME4UHL.cjs} +25 -2
  8. package/dist/chunk-3OME4UHL.cjs.map +1 -0
  9. package/dist/chunk-6NXQSQ3A.cjs +511 -0
  10. package/dist/chunk-6NXQSQ3A.cjs.map +1 -0
  11. package/dist/{chunk-CYMZ2QS5.js → chunk-BCJFOSZX.js} +2 -2
  12. package/dist/{chunk-CYMZ2QS5.js.map → chunk-BCJFOSZX.js.map} +1 -1
  13. package/dist/{chunk-SNEQXSC5.cjs → chunk-VA7QN4DX.cjs} +2 -2
  14. package/dist/{chunk-SNEQXSC5.cjs.map → chunk-VA7QN4DX.cjs.map} +1 -1
  15. package/dist/components/CollabStatus/index.cjs +21 -0
  16. package/dist/components/CollabStatus/index.cjs.map +1 -0
  17. package/dist/components/CollabStatus/index.d.cts +222 -0
  18. package/dist/components/CollabStatus/index.d.ts +222 -0
  19. package/dist/components/CollabStatus/index.js +4 -0
  20. package/dist/components/CollabStatus/index.js.map +1 -0
  21. package/dist/index.cjs +68 -55
  22. package/dist/index.cjs.map +1 -1
  23. package/dist/index.d.cts +22 -0
  24. package/dist/index.d.ts +22 -0
  25. package/dist/index.js +10 -9
  26. package/dist/index.js.map +1 -1
  27. package/dist/styles.css +1 -1
  28. package/dist/tailwind-preset.cjs +4 -4
  29. package/dist/tailwind-preset.js +1 -1
  30. package/dist/utils/index.cjs +9 -9
  31. package/dist/utils/index.js +1 -1
  32. package/package.json +2 -1
  33. package/dist/chunk-VIWEV6TJ.cjs.map +0 -1
  34. package/dist/chunk-Y3ZZEDIU.js.map +0 -1
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var chunkSNEQXSC5_cjs = require('../chunk-SNEQXSC5.cjs');
3
+ var chunkVA7QN4DX_cjs = require('../chunk-VA7QN4DX.cjs');
4
+ var chunkZ5J4NTPL_cjs = require('../chunk-Z5J4NTPL.cjs');
4
5
  var chunkU7VQUOLS_cjs = require('../chunk-U7VQUOLS.cjs');
5
6
  var chunkX7S76WB7_cjs = require('../chunk-X7S76WB7.cjs');
6
7
  var chunkP52GA3GJ_cjs = require('../chunk-P52GA3GJ.cjs');
7
8
  var chunkLCQGAOAZ_cjs = require('../chunk-LCQGAOAZ.cjs');
8
- var chunkZ5J4NTPL_cjs = require('../chunk-Z5J4NTPL.cjs');
9
9
  var chunkJ644FU54_cjs = require('../chunk-J644FU54.cjs');
10
10
  var chunkWNJRS7Y7_cjs = require('../chunk-WNJRS7Y7.cjs');
11
11
  var chunkUCGUA3QV_cjs = require('../chunk-UCGUA3QV.cjs');
@@ -15,7 +15,11 @@ var chunkRR2MJBGV_cjs = require('../chunk-RR2MJBGV.cjs');
15
15
 
16
16
  Object.defineProperty(exports, "brands", {
17
17
  enumerable: true,
18
- get: function () { return chunkSNEQXSC5_cjs.brands; }
18
+ get: function () { return chunkVA7QN4DX_cjs.brands; }
19
+ });
20
+ Object.defineProperty(exports, "wagglelineBrand", {
21
+ enumerable: true,
22
+ get: function () { return chunkZ5J4NTPL_cjs.wagglelineBrand; }
19
23
  });
20
24
  Object.defineProperty(exports, "webchartBrand", {
21
25
  enumerable: true,
@@ -33,10 +37,6 @@ Object.defineProperty(exports, "miewebBrand", {
33
37
  enumerable: true,
34
38
  get: function () { return chunkLCQGAOAZ_cjs.miewebBrand; }
35
39
  });
36
- Object.defineProperty(exports, "wagglelineBrand", {
37
- enumerable: true,
38
- get: function () { return chunkZ5J4NTPL_cjs.wagglelineBrand; }
39
- });
40
40
  Object.defineProperty(exports, "createBrandPreset", {
41
41
  enumerable: true,
42
42
  get: function () { return chunkJ644FU54_cjs.createBrandPreset; }
@@ -1,9 +1,9 @@
1
- export { brands } from '../chunk-CYMZ2QS5.js';
1
+ export { brands } from '../chunk-BCJFOSZX.js';
2
+ export { wagglelineBrand } from '../chunk-2NTYAALC.js';
2
3
  export { webchartBrand } from '../chunk-CW66SO5O.js';
3
4
  export { defaultBrand } from '../chunk-PSTGFXQG.js';
4
5
  export { enterpriseHealthBrand } from '../chunk-MTZPVOP6.js';
5
6
  export { miewebBrand } from '../chunk-NERS5ZT6.js';
6
- export { wagglelineBrand } from '../chunk-2NTYAALC.js';
7
7
  export { createBrandPreset, generateBrandCSS, generateTailwindTheme } from '../chunk-WOYUQ4AT.js';
8
8
  export { bluehiveBrand } from '../chunk-3T7QGLNB.js';
9
9
  export { ccmeBrand } from '../chunk-SCQRJPSV.js';
@@ -379,6 +379,29 @@ var miewebUISafelist = [
379
379
  "text-[11px]",
380
380
  // CodeLookup memory picklist (frequently-used pick count)
381
381
  "text-primary-600",
382
+ // CodeLookup coding-system toggle (segmented radiogroup pills)
383
+ "flex",
384
+ "flex-wrap",
385
+ "items-center",
386
+ "gap-1",
387
+ "rounded-full",
388
+ "px-2.5",
389
+ "py-0.5",
390
+ "text-xs",
391
+ "transition-colors",
392
+ "focus:ring-2",
393
+ "focus:outline-none",
394
+ "border-primary-800",
395
+ "dark:border-primary-400",
396
+ "dark:bg-primary-400",
397
+ "dark:text-primary-950",
398
+ "text-white",
399
+ "hover:text-foreground",
400
+ // CollabStatus debug panel (fixed-width portal, definition grid, log grid)
401
+ "w-[26rem]",
402
+ "max-w-[calc(100vw-1rem)]",
403
+ "grid-cols-[auto_1fr]",
404
+ "grid-cols-[auto_auto_1fr]",
382
405
  // SuperChat (participant chips, unread badge, active/hover states)
383
406
  "bg-primary-100",
384
407
  "bg-primary-600",
@@ -604,5 +627,5 @@ var miewebUIPreset = {
604
627
  var tailwind_preset_default = miewebUIPreset;
605
628
 
606
629
  export { miewebUIPreset, miewebUISafelist, tailwind_preset_default };
607
- //# sourceMappingURL=chunk-Y3ZZEDIU.js.map
608
- //# sourceMappingURL=chunk-Y3ZZEDIU.js.map
630
+ //# sourceMappingURL=chunk-2YDKLURF.js.map
631
+ //# sourceMappingURL=chunk-2YDKLURF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tailwind-preset.ts"],"names":[],"mappings":"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","file":"chunk-2YDKLURF.js","sourcesContent":["/**\n * @mieweb/ui Tailwind CSS Preset\n *\n * This preset provides the default theme configuration for @mieweb/ui components.\n * Consumers can extend or override these values in their own tailwind.config.js\n *\n * Usage:\n * ```js\n * // tailwind.config.js\n * module.exports = {\n * presets: [require('@mieweb/ui/tailwind-preset')],\n * theme: {\n * extend: {\n * colors: {\n * primary: {\n * 500: '#your-brand-color',\n * },\n * },\n * },\n * },\n * };\n * ```\n */\n\n/**\n * Safelist of classes used by @mieweb/ui components.\n *\n * **Tailwind CSS 3**: These must be safelisted because Tailwind may not detect\n * them when components are imported from node_modules.\n *\n * **Tailwind CSS 4**: The safelist is NOT needed if you add the `@source`\n * directive to your CSS. Add this line to your main CSS file:\n *\n * @source \"../node_modules/@mieweb/ui/dist\";\n *\n * This tells Tailwind 4 to scan @mieweb/ui's dist folder for class names,\n * replacing the need for a manual safelist.\n *\n * @deprecated For Tailwind CSS 4 users — use the `@source` directive instead.\n */\nexport const miewebUISafelist = [\n // Media stack (MediaEditor / TranscriptView / MediaPlayer) — opacity-modifier\n // and state variants introduced with the media components (ui#323 finding):\n 'bg-muted/20',\n 'bg-primary-50',\n 'bg-primary-500/20',\n 'bg-primary-500/40',\n 'bg-success/15',\n 'bg-warning/20',\n 'bg-warning/40',\n 'border-l-warning',\n 'border-primary-600',\n 'border-warning/50',\n 'dark:bg-primary-950',\n 'hover:bg-destructive/20',\n 'hover:bg-muted',\n 'hover:bg-muted/70',\n 'hover:bg-primary-500/15',\n 'hover:bg-primary-500/30',\n 'hover:bg-success/25',\n 'hover:text-destructive',\n 'outline-destructive',\n 'outline-primary-500',\n 'outline-warning',\n 'text-primary-500',\n // Semantic colors\n 'border-border',\n 'border-input',\n 'ring-ring',\n 'bg-background',\n 'bg-card',\n 'bg-muted',\n 'bg-primary',\n 'bg-primary-800',\n 'dark:bg-primary-500',\n 'checked:border-primary-500',\n 'dark:checked:border-primary-800',\n 'bg-success',\n 'bg-warning',\n 'bg-destructive',\n 'bg-info',\n // Ozwell brand accent (Hey Ozwell voice components)\n 'bg-ozwell',\n 'hover:bg-ozwell',\n 'active:bg-ozwell',\n 'text-ozwell',\n 'text-ozwell-foreground',\n 'border-ozwell',\n 'focus-visible:ring-ozwell',\n 'text-foreground',\n 'text-card-foreground',\n 'text-muted-foreground',\n 'text-primary',\n 'text-primary-foreground',\n 'text-success',\n 'text-success-foreground',\n 'text-warning',\n 'text-warning-foreground',\n 'text-destructive',\n 'text-destructive-foreground',\n 'text-info',\n 'text-info-foreground',\n 'focus:ring-ring',\n 'focus:ring-primary',\n 'focus:border-transparent',\n 'focus:ring-destructive',\n 'border-primary',\n 'border-destructive',\n 'border-success',\n 'focus:ring-success/20',\n 'focus:ring-destructive/20',\n 'opacity-0',\n // Drag & drop (useDragReorder / dragIndicatorClasses)\n 'opacity-40',\n 'cursor-grab',\n 'active:cursor-grabbing',\n 'shadow-[inset_0_2px_0_0_var(--color-primary-500,#3b82f6)]',\n 'shadow-[inset_0_-2px_0_0_var(--color-primary-500,#3b82f6)]',\n 'group-hover:opacity-100',\n 'focus:opacity-100',\n 'has-[[data-slot=superchat-nitro-table]]:w-full',\n 'has-[[data-slot=superchat-nitro-table]]:max-w-full',\n // RowActionToolbar (per-row action toolbars) reveal/overlay. These use the\n // built-in `pointer-fine` variant, named `group/order` scope, and the\n // `.wcdv-tr` (datavis grid row) arbitrary variant — none of which TW3\n // consumers scan from node_modules, so the toolbar would stay hidden\n // without safelisting them.\n 'pointer-fine:absolute',\n 'pointer-fine:top-1/2',\n 'pointer-fine:right-0',\n 'pointer-fine:-translate-y-1/2',\n 'pointer-fine:top-1.5',\n 'pointer-fine:right-1.5',\n 'pointer-fine:bg-card',\n 'pointer-fine:border-border',\n 'pointer-fine:rounded-md',\n 'pointer-fine:border',\n 'pointer-fine:p-0.5',\n 'pointer-fine:shadow-sm',\n 'pointer-fine:pointer-events-none',\n 'pointer-fine:opacity-0',\n 'rounded-md',\n 'border',\n 'p-0.5',\n 'shadow-sm',\n 'focus-within:pointer-events-auto',\n 'focus-within:opacity-100',\n 'group-hover:pointer-events-auto',\n 'group-focus-within:pointer-events-auto',\n 'group-focus-within:opacity-100',\n 'group-focus:pointer-events-auto',\n 'group-focus:opacity-100',\n 'group-hover/order:pointer-events-auto',\n 'group-hover/order:opacity-100',\n 'group-focus-within/order:pointer-events-auto',\n 'group-focus-within/order:opacity-100',\n 'group-focus/order:pointer-events-auto',\n 'group-focus/order:opacity-100',\n '[.wcdv-tr:hover_&]:pointer-events-auto',\n '[.wcdv-tr:hover_&]:opacity-100',\n '[.wcdv-tr:focus-within_&]:pointer-events-auto',\n '[.wcdv-tr:focus-within_&]:opacity-100',\n // Markdown SurveyBlock\n 'accent-primary-500',\n // Opacity-modifier variants for semantic colors used by components\n 'bg-background/60',\n 'bg-background/80',\n 'bg-background/90',\n 'bg-background/95',\n 'bg-card/80',\n 'bg-destructive/5',\n 'bg-destructive/10',\n 'bg-foreground/50',\n 'bg-info/10',\n 'bg-muted/10',\n 'bg-muted/30',\n 'bg-muted/50',\n 'bg-primary/5',\n 'bg-primary/10',\n 'bg-success/10',\n 'bg-warning/10',\n 'border-border/80',\n 'border-destructive/20',\n 'border-destructive/30',\n 'border-destructive/50',\n 'border-info/30',\n 'border-muted-foreground/25',\n 'border-muted-foreground/40',\n 'border-primary/30',\n 'border-primary/50',\n 'border-success/30',\n 'border-success/50',\n 'border-warning/30',\n 'hover:bg-destructive/10',\n 'hover:bg-muted/10',\n 'hover:bg-muted/20',\n 'hover:bg-muted/50',\n 'hover:bg-muted/80',\n 'hover:bg-primary/5',\n 'hover:bg-primary/10',\n 'hover:bg-primary/20',\n 'hover:bg-primary/90',\n 'hover:border-border/80',\n 'hover:border-muted-foreground/50',\n 'hover:text-destructive/80',\n 'hover:text-primary/80',\n 'text-muted-foreground/30',\n 'text-muted-foreground/40',\n 'text-muted-foreground/50',\n 'text-muted-foreground/60',\n 'text-muted-foreground/70',\n 'text-primary/80',\n 'text-primary-foreground/90',\n 'ring-primary',\n 'ring-2',\n 'ring-offset-2',\n // Grid classes for QuickAction and responsive layouts\n 'grid-cols-1',\n 'grid-cols-2',\n 'grid-cols-3',\n 'grid-cols-4',\n 'grid-cols-6',\n 'sm:grid-cols-1',\n 'sm:grid-cols-2',\n 'sm:grid-cols-3',\n 'sm:grid-cols-4',\n 'sm:grid-cols-6',\n 'md:grid-cols-2',\n 'md:grid-cols-3',\n 'md:grid-cols-4',\n 'lg:grid-cols-2',\n 'lg:grid-cols-3',\n 'lg:grid-cols-4',\n // ── Expanded Color Scales ────────────────────────────────────────\n // Secondary scale\n 'bg-secondary',\n 'bg-secondary-50',\n 'bg-secondary-100',\n 'bg-secondary-500',\n 'bg-secondary-600',\n 'text-secondary',\n 'text-secondary-500',\n 'text-secondary-600',\n 'text-secondary-700',\n 'text-secondary-foreground',\n 'border-secondary',\n 'border-secondary-200',\n // Neutral scale\n 'bg-neutral-50',\n 'bg-neutral-100',\n 'bg-neutral-200',\n 'bg-neutral-300',\n 'bg-neutral-800',\n 'bg-neutral-900',\n 'text-neutral-500',\n 'text-neutral-600',\n 'text-neutral-700',\n 'text-neutral-400',\n 'border-neutral-200',\n 'border-neutral-300',\n 'dark:bg-neutral-700',\n 'dark:bg-neutral-800',\n 'dark:text-neutral-300',\n 'dark:text-neutral-400',\n 'dark:border-neutral-600',\n 'dark:border-neutral-700',\n // Indigo (StripeBadge)\n 'bg-indigo-500/10',\n 'dark:bg-indigo-400/20',\n 'text-indigo-700',\n 'dark:text-indigo-300',\n 'border-indigo-500/30',\n 'hover:text-indigo-700',\n 'dark:hover:text-indigo-300',\n // Destructive scale\n 'bg-destructive-50',\n 'bg-destructive-100',\n 'bg-destructive-500',\n 'bg-destructive-600',\n 'bg-destructive-700',\n 'hover:bg-destructive-800',\n 'text-destructive-500',\n 'text-destructive-600',\n 'text-destructive-700',\n 'text-destructive-800',\n 'text-destructive-900',\n 'border-destructive-200',\n 'border-destructive-300',\n 'dark:bg-destructive-900',\n 'dark:bg-destructive-950',\n 'dark:text-destructive-300',\n 'dark:text-destructive-400',\n // Success scale\n 'bg-success-50',\n 'bg-success-100',\n 'bg-success-500',\n 'bg-success-600',\n 'bg-success-700',\n 'hover:bg-success-800',\n 'text-success-500',\n 'text-success-600',\n 'text-success-700',\n 'text-success-800',\n 'text-success-900',\n 'border-success-200',\n 'border-success-300',\n 'dark:bg-success-900',\n 'dark:bg-success-950',\n 'dark:text-success-300',\n 'dark:text-success-400',\n // Warning scale\n 'bg-warning-50',\n 'bg-warning-100',\n 'bg-warning-500',\n 'bg-warning-600',\n 'bg-warning-700',\n 'text-warning-900',\n 'text-warning-500',\n 'text-warning-600',\n 'text-warning-700',\n 'text-warning-800',\n 'text-warning-900',\n 'border-warning-200',\n 'border-warning-300',\n 'dark:bg-warning-900',\n 'dark:bg-warning-950',\n 'dark:text-warning-300',\n 'dark:text-warning-400',\n // Info scale\n 'bg-info-50',\n 'bg-info-100',\n 'bg-info-500',\n 'bg-info-600',\n 'text-info-500',\n 'text-info-600',\n 'text-info-700',\n 'text-info-800',\n 'text-info-900',\n 'border-info-200',\n 'border-info-300',\n 'dark:bg-info-900',\n 'dark:bg-info-950',\n 'dark:text-info-300',\n 'dark:text-info-400',\n // Chart colors\n 'bg-chart-1',\n 'bg-chart-2',\n 'bg-chart-3',\n 'bg-chart-4',\n 'bg-chart-5',\n 'text-chart-1',\n 'text-chart-2',\n 'text-chart-3',\n 'text-chart-4',\n 'text-chart-5',\n 'border-chart-1',\n 'border-chart-2',\n 'border-chart-3',\n 'border-chart-4',\n 'border-chart-5',\n // Switch component\n 'bg-primary-500',\n // Primary scale (a11y contrast)\n 'text-primary-800',\n 'dark:text-primary-300',\n // Text decoration\n 'underline',\n 'h-5',\n 'w-9',\n 'h-6',\n 'w-11',\n 'h-7',\n 'w-14',\n 'h-4',\n 'w-4',\n 'w-5',\n 'w-6',\n 'translate-x-0.5',\n 'translate-x-4',\n 'translate-x-5',\n 'translate-x-7',\n // SchedulePicker / overflow handling\n 'overflow-x-auto',\n 'overflow-hidden',\n // Scrollable floating panels (DateInput calendar, Autocomplete, Select, Table, ScrollArea, …)\n 'overflow-auto',\n // Select component\n 'truncate',\n // AIReconciliationPanel\n 'ring-primary-200',\n 'dark:ring-primary-900',\n 'border-primary-300',\n 'dark:border-primary-700',\n 'bg-primary-50/60',\n 'dark:bg-primary-950/30',\n 'text-primary-700',\n 'dark:text-primary-400',\n 'border-border/60',\n 'bg-muted/40',\n 'bg-muted/60',\n 'divide-border',\n 'max-h-[60vh]',\n 'bg-success-100',\n 'dark:bg-success-900/30',\n 'bg-amber-100',\n 'bg-amber-200',\n 'text-amber-700',\n 'text-amber-800',\n 'text-amber-200',\n 'text-amber-300',\n 'dark:bg-amber-900/30',\n 'dark:bg-amber-900/40',\n 'dark:text-amber-200',\n 'dark:text-amber-300',\n 'ring-1',\n 'last:border-b-0',\n 'border-dashed',\n 'text-[11px]',\n // CodeLookup memory picklist (frequently-used pick count)\n 'text-primary-600',\n // CodeLookup coding-system toggle (segmented radiogroup pills)\n 'flex',\n 'flex-wrap',\n 'items-center',\n 'gap-1',\n 'rounded-full',\n 'px-2.5',\n 'py-0.5',\n 'text-xs',\n 'transition-colors',\n 'focus:ring-2',\n 'focus:outline-none',\n 'border-primary-800',\n 'dark:border-primary-400',\n 'dark:bg-primary-400',\n 'dark:text-primary-950',\n 'text-white',\n 'hover:text-foreground',\n // CollabStatus debug panel (fixed-width portal, definition grid, log grid)\n 'w-[26rem]',\n 'max-w-[calc(100vw-1rem)]',\n 'grid-cols-[auto_1fr]',\n 'grid-cols-[auto_auto_1fr]',\n // SuperChat (participant chips, unread badge, active/hover states)\n 'bg-primary-100',\n 'bg-primary-600',\n 'hover:bg-primary-700',\n 'dark:bg-primary-900/40',\n 'text-primary-900',\n 'dark:text-primary-100',\n 'dark:text-primary-200',\n 'hover:border-primary-300',\n 'focus:border-primary-500',\n 'focus:ring-primary-500',\n 'text-[10px]',\n // SuperChat mermaid diagram wrapper — arbitrary variants applied to the\n // injected <svg> so the diagram sizes naturally instead of collapsing.\n '[&_svg]:h-auto',\n '[&_svg]:max-w-none',\n];\n\nexport interface MiewebUIPreset {\n darkMode: ['class', '[data-theme=\"dark\"]'];\n safelist: string[];\n theme: {\n extend: Record<string, unknown>;\n };\n}\n\nexport const miewebUIPreset: MiewebUIPreset = {\n darkMode: ['class', '[data-theme=\"dark\"]'],\n safelist: miewebUISafelist,\n theme: {\n extend: {\n colors: {\n // Primary color scale - easily overridable by consumers\n primary: {\n DEFAULT: 'var(--mieweb-primary, var(--mieweb-primary-500, #27aae1))',\n 50: 'var(--mieweb-primary-50, #e6f7fc)',\n 100: 'var(--mieweb-primary-100, #b3e6f6)',\n 200: 'var(--mieweb-primary-200, #80d5f0)',\n 300: 'var(--mieweb-primary-300, #4dc4ea)',\n 400: 'var(--mieweb-primary-400, #27aae1)',\n 500: 'var(--mieweb-primary-500, #27aae1)',\n 600: 'var(--mieweb-primary-600, #1f98ca)',\n 700: 'var(--mieweb-primary-700, #1786b3)',\n 800: 'var(--mieweb-primary-800, #0f749c)',\n 900: 'var(--mieweb-primary-900, #086285)',\n 950: 'var(--mieweb-primary-950, #00506e)',\n foreground: 'var(--mieweb-primary-foreground, hsl(210 40% 98%))',\n },\n // Ozwell brand accent (the \"Hey Ozwell\" octopus blue) — distinct from the host app primary.\n ozwell: {\n DEFAULT: 'var(--mieweb-ozwell, #0BA0E0)',\n foreground: 'var(--mieweb-ozwell-foreground, hsl(0 0% 100%))',\n },\n // Secondary color scale\n secondary: {\n DEFAULT: 'var(--mieweb-secondary-500, #6366f1)',\n 50: 'var(--mieweb-secondary-50, #eef2ff)',\n 100: 'var(--mieweb-secondary-100, #e0e7ff)',\n 200: 'var(--mieweb-secondary-200, #c7d2fe)',\n 300: 'var(--mieweb-secondary-300, #a5b4fc)',\n 400: 'var(--mieweb-secondary-400, #818cf8)',\n 500: 'var(--mieweb-secondary-500, #6366f1)',\n 600: 'var(--mieweb-secondary-600, #4f46e5)',\n 700: 'var(--mieweb-secondary-700, #4338ca)',\n 800: 'var(--mieweb-secondary-800, #3730a3)',\n 900: 'var(--mieweb-secondary-900, #312e81)',\n 950: 'var(--mieweb-secondary-950, #1e1b4b)',\n foreground: 'var(--mieweb-secondary-foreground, #ffffff)',\n },\n // Neutral / gray scale\n neutral: {\n DEFAULT: 'var(--mieweb-neutral-500, #737373)',\n 50: 'var(--mieweb-neutral-50, #fafafa)',\n 100: 'var(--mieweb-neutral-100, #f5f5f5)',\n 200: 'var(--mieweb-neutral-200, #e5e5e5)',\n 300: 'var(--mieweb-neutral-300, #d4d4d4)',\n 400: 'var(--mieweb-neutral-400, #a3a3a3)',\n 500: 'var(--mieweb-neutral-500, #737373)',\n 600: 'var(--mieweb-neutral-600, #525252)',\n 700: 'var(--mieweb-neutral-700, #404040)',\n 800: 'var(--mieweb-neutral-800, #262626)',\n 900: 'var(--mieweb-neutral-900, #171717)',\n 950: 'var(--mieweb-neutral-950, #0a0a0a)',\n },\n // Semantic colors using CSS variables for theming\n border: 'var(--mieweb-border, hsl(214.3 31.8% 91.4%))',\n input: 'var(--mieweb-input, hsl(214.3 31.8% 91.4%))',\n ring: 'var(--mieweb-ring, hsl(221.2 83.2% 53.3%))',\n background: 'var(--mieweb-background, hsl(0 0% 100%))',\n foreground: 'var(--mieweb-foreground, hsl(222.2 84% 4.9%))',\n // Component-specific semantic colors\n card: {\n DEFAULT: 'var(--mieweb-card, hsl(0 0% 100%))',\n foreground: 'var(--mieweb-card-foreground, hsl(222.2 84% 4.9%))',\n },\n muted: {\n DEFAULT: 'var(--mieweb-muted, hsl(210 40% 96.1%))',\n foreground: 'var(--mieweb-muted-foreground, hsl(215.4 16.3% 46.9%))',\n },\n // Destructive / error scale\n destructive: {\n DEFAULT:\n 'var(--mieweb-destructive, var(--mieweb-destructive-500, #dc2626))',\n 50: 'var(--mieweb-destructive-50, #fef2f2)',\n 100: 'var(--mieweb-destructive-100, #fee2e2)',\n 200: 'var(--mieweb-destructive-200, #fecaca)',\n 300: 'var(--mieweb-destructive-300, #fca5a5)',\n 400: 'var(--mieweb-destructive-400, #f87171)',\n 500: 'var(--mieweb-destructive-500, #dc2626)',\n 600: 'var(--mieweb-destructive-600, #dc2626)',\n 700: 'var(--mieweb-destructive-700, #b91c1c)',\n 800: 'var(--mieweb-destructive-800, #991b1b)',\n 900: 'var(--mieweb-destructive-900, #7f1d1d)',\n 950: 'var(--mieweb-destructive-950, #450a0a)',\n foreground: 'var(--mieweb-destructive-foreground, hsl(210 40% 98%))',\n },\n // Success scale\n success: {\n DEFAULT: 'var(--mieweb-success-500, #22c55e)',\n 50: 'var(--mieweb-success-50, #f0fdf4)',\n 100: 'var(--mieweb-success-100, #dcfce7)',\n 200: 'var(--mieweb-success-200, #bbf7d0)',\n 300: 'var(--mieweb-success-300, #86efac)',\n 400: 'var(--mieweb-success-400, #4ade80)',\n 500: 'var(--mieweb-success-500, #22c55e)',\n 600: 'var(--mieweb-success-600, #16a34a)',\n 700: 'var(--mieweb-success-700, #15803d)',\n 800: 'var(--mieweb-success-800, #166534)',\n 900: 'var(--mieweb-success-900, #14532d)',\n 950: 'var(--mieweb-success-950, #052e16)',\n foreground: 'var(--mieweb-success-foreground, hsl(355.7 100% 97.3%))',\n },\n // Warning scale\n warning: {\n DEFAULT: 'var(--mieweb-warning-500, #f59e0b)',\n 50: 'var(--mieweb-warning-50, #fffbeb)',\n 100: 'var(--mieweb-warning-100, #fef3c7)',\n 200: 'var(--mieweb-warning-200, #fde68a)',\n 300: 'var(--mieweb-warning-300, #fcd34d)',\n 400: 'var(--mieweb-warning-400, #fbbf24)',\n 500: 'var(--mieweb-warning-500, #f59e0b)',\n 600: 'var(--mieweb-warning-600, #d97706)',\n 700: 'var(--mieweb-warning-700, #b45309)',\n 800: 'var(--mieweb-warning-800, #92400e)',\n 900: 'var(--mieweb-warning-900, #78350f)',\n 950: 'var(--mieweb-warning-950, #451a03)',\n foreground: 'var(--mieweb-warning-foreground, hsl(26 83.3% 14.1%))',\n },\n // Info scale\n info: {\n DEFAULT: 'var(--mieweb-info-500, #0ea5e9)',\n 50: 'var(--mieweb-info-50, #f0f9ff)',\n 100: 'var(--mieweb-info-100, #e0f2fe)',\n 200: 'var(--mieweb-info-200, #bae6fd)',\n 300: 'var(--mieweb-info-300, #7dd3fc)',\n 400: 'var(--mieweb-info-400, #38bdf8)',\n 500: 'var(--mieweb-info-500, #0ea5e9)',\n 600: 'var(--mieweb-info-600, #0284c7)',\n 700: 'var(--mieweb-info-700, #0369a1)',\n 800: 'var(--mieweb-info-800, #075985)',\n 900: 'var(--mieweb-info-900, #0c4a6e)',\n 950: 'var(--mieweb-info-950, #082f49)',\n foreground: 'var(--mieweb-info-foreground, #ffffff)',\n },\n // Chart / data visualization\n chart: {\n 1: 'var(--mieweb-chart-1, #27aae1)',\n 2: 'var(--mieweb-chart-2, #22c55e)',\n 3: 'var(--mieweb-chart-3, #f59e0b)',\n 4: 'var(--mieweb-chart-4, #ef4444)',\n 5: 'var(--mieweb-chart-5, #6366f1)',\n },\n },\n fontFamily: {\n sans: [\n 'var(--mieweb-font-sans, ui-sans-serif)',\n 'system-ui',\n 'sans-serif',\n ],\n },\n borderRadius: {\n '2xl': 'var(--mieweb-radius-2xl, 1rem)',\n lg: 'var(--mieweb-radius-lg, 0.75rem)',\n md: 'var(--mieweb-radius-md, 0.5rem)',\n sm: 'var(--mieweb-radius-sm, 0.25rem)',\n xl: 'var(--mieweb-radius-xl, 1rem)',\n },\n boxShadow: {\n card: 'var(--mieweb-shadow-card, 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1))',\n },\n keyframes: {\n 'fade-in': {\n '0%': { opacity: '0' },\n '100%': { opacity: '1' },\n },\n 'fade-out': {\n '0%': { opacity: '1' },\n '100%': { opacity: '0' },\n },\n 'slide-in-from-top': {\n '0%': { transform: 'translateY(-0.5rem)', opacity: '0' },\n '100%': { transform: 'translateY(0)', opacity: '1' },\n },\n 'slide-in-from-bottom': {\n '0%': { transform: 'translateY(0.5rem)', opacity: '0' },\n '100%': { transform: 'translateY(0)', opacity: '1' },\n },\n 'slide-in-right': {\n '0%': { transform: 'translateX(100%)', opacity: '0' },\n '100%': { transform: 'translateX(0)', opacity: '1' },\n },\n 'slide-in-left': {\n '0%': { transform: 'translateX(-100%)', opacity: '0' },\n '100%': { transform: 'translateX(0)', opacity: '1' },\n },\n 'scale-in': {\n '0%': { transform: 'scale(0.95)', opacity: '0' },\n '100%': { transform: 'scale(1)', opacity: '1' },\n },\n },\n animation: {\n 'fade-in': 'fade-in 150ms ease-out',\n 'fade-out': 'fade-out 150ms ease-in',\n 'slide-in-from-top': 'slide-in-from-top 150ms ease-out',\n 'slide-in-from-bottom': 'slide-in-from-bottom 150ms ease-out',\n 'slide-in-right': 'slide-in-right 300ms ease-out',\n 'slide-in-left': 'slide-in-left 300ms ease-out',\n 'scale-in': 'scale-in 150ms ease-out',\n },\n },\n },\n};\n\nexport default miewebUIPreset;\n"]}
@@ -0,0 +1,487 @@
1
+ import { cn } from './chunk-F3SOEIN2.js';
2
+ import * as React2 from 'react';
3
+ import { createPortal } from 'react-dom';
4
+ import { WrapText, X } from 'lucide-react';
5
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
6
+
7
+ var defaultCollabStatusLabels = {
8
+ live: "Live",
9
+ connecting: "Connecting\u2026",
10
+ editing: (names) => `${names.join(", ")} ${names.length === 1 ? "is" : "are"} editing`,
11
+ triggerLabel: "Live-sync status \u2014 open the update log",
12
+ peersTitle: (count) => `In the room (${count})`,
13
+ alone: "You are the only one here.",
14
+ logTitle: (count) => `Update log (${count})`,
15
+ close: "Close update log",
16
+ wrap: "Wrap long values",
17
+ empty: "No updates yet.",
18
+ roomTerm: "Room",
19
+ urlTerm: "Socket",
20
+ clientTerm: "Client",
21
+ userTerm: "User",
22
+ clientSynced: "synced",
23
+ clientConnecting: "connecting"
24
+ };
25
+ function peerLabels(peers) {
26
+ const seen = /* @__PURE__ */ new Map();
27
+ for (const p of peers) {
28
+ const entry = seen.get(p.name);
29
+ if (entry) entry.count += 1;
30
+ else seen.set(p.name, { count: 1, color: p.color });
31
+ }
32
+ return [...seen].map(([name, { count, color }]) => ({
33
+ label: count > 1 ? `${name} (${count})` : name,
34
+ color
35
+ }));
36
+ }
37
+ var PANEL_OFFSET = 6;
38
+ var VIEWPORT_PADDING = 8;
39
+ function useAnchoredPanel(open, anchorRef, panelRef) {
40
+ const [pos, setPos] = React2.useState(
41
+ null
42
+ );
43
+ React2.useLayoutEffect(() => {
44
+ if (!open) {
45
+ setPos(null);
46
+ return;
47
+ }
48
+ const update = () => {
49
+ const anchor = anchorRef.current;
50
+ const panel = panelRef.current;
51
+ if (!anchor || !panel) return;
52
+ const a = anchor.getBoundingClientRect();
53
+ const { offsetWidth: width, offsetHeight: height } = panel;
54
+ const maxLeft = window.innerWidth - width - VIEWPORT_PADDING;
55
+ const left = Math.max(
56
+ VIEWPORT_PADDING,
57
+ Math.min(a.right - width, Math.max(VIEWPORT_PADDING, maxLeft))
58
+ );
59
+ let top = a.bottom + PANEL_OFFSET;
60
+ if (top + height > window.innerHeight - VIEWPORT_PADDING) {
61
+ top = Math.max(VIEWPORT_PADDING, a.top - height - PANEL_OFFSET);
62
+ }
63
+ setPos({ top, left });
64
+ };
65
+ const raf = window.requestAnimationFrame(update);
66
+ window.addEventListener("scroll", update, true);
67
+ window.addEventListener("resize", update);
68
+ return () => {
69
+ window.cancelAnimationFrame(raf);
70
+ window.removeEventListener("scroll", update, true);
71
+ window.removeEventListener("resize", update);
72
+ };
73
+ }, [open, anchorRef, panelRef]);
74
+ return pos;
75
+ }
76
+ var KIND_TONE = {
77
+ doc: "text-muted-foreground",
78
+ awareness: "text-primary-600 dark:text-primary-400",
79
+ sync: "text-success-700 dark:text-success-400",
80
+ patch: "text-muted-foreground"
81
+ };
82
+ function CollabStatus({
83
+ connected,
84
+ peers = [],
85
+ log = [],
86
+ room = null,
87
+ showLog = true,
88
+ compact = false,
89
+ attention = null,
90
+ labels: labelOverrides,
91
+ className
92
+ }) {
93
+ const labels = { ...defaultCollabStatusLabels, ...labelOverrides };
94
+ const [open, setOpen] = React2.useState(false);
95
+ const [wrapped, setWrapped] = React2.useState(false);
96
+ const triggerRef = React2.useRef(null);
97
+ const panelRef = React2.useRef(null);
98
+ const pos = useAnchoredPanel(open && showLog, triggerRef, panelRef);
99
+ const titleId = React2.useId();
100
+ React2.useEffect(() => {
101
+ if (!open) return;
102
+ const onKeyDown = (e) => {
103
+ if (e.key !== "Escape") return;
104
+ setOpen(false);
105
+ triggerRef.current?.focus();
106
+ };
107
+ const onPointerDown = (e) => {
108
+ const target = e.target;
109
+ if (panelRef.current?.contains(target)) return;
110
+ if (triggerRef.current?.contains(target)) return;
111
+ setOpen(false);
112
+ };
113
+ document.addEventListener("keydown", onKeyDown);
114
+ document.addEventListener("pointerdown", onPointerDown);
115
+ return () => {
116
+ document.removeEventListener("keydown", onKeyDown);
117
+ document.removeEventListener("pointerdown", onPointerDown);
118
+ };
119
+ }, [open]);
120
+ const occupants = peerLabels(peers);
121
+ const names = occupants.map((p) => p.label);
122
+ const clip = wrapped ? "break-all whitespace-pre-wrap" : "truncate";
123
+ const statusText = connected ? labels.live : labels.connecting;
124
+ const clientLine = `${room?.clientId ?? "\u2014"} \xB7 ${connected ? labels.clientSynced : labels.clientConnecting}`;
125
+ const triggerLabel = compact ? [
126
+ labels.triggerLabel,
127
+ statusText,
128
+ attention,
129
+ names.length > 0 && labels.editing(names)
130
+ ].filter(Boolean).join(" \u2014 ") : labels.triggerLabel;
131
+ const trigger = /* @__PURE__ */ jsxs(
132
+ "button",
133
+ {
134
+ type: "button",
135
+ ref: triggerRef,
136
+ className: cn(
137
+ "text-muted-foreground inline-flex items-center gap-1.5 rounded-md px-1.5 py-0.5 text-xs",
138
+ "focus-visible:ring-ring focus-visible:ring-2 focus-visible:ring-offset-1 focus-visible:outline-none",
139
+ showLog && "hover:bg-muted cursor-pointer",
140
+ className
141
+ ),
142
+ onClick: showLog ? () => setOpen((v) => !v) : void 0,
143
+ disabled: !showLog,
144
+ title: showLog ? triggerLabel : void 0,
145
+ "aria-expanded": showLog ? open : void 0,
146
+ "aria-label": showLog ? triggerLabel : void 0,
147
+ "data-slot": "collab-status-trigger",
148
+ children: [
149
+ /* @__PURE__ */ jsx(
150
+ "span",
151
+ {
152
+ "aria-hidden": "true",
153
+ "data-slot": "collab-status-dot",
154
+ className: cn(
155
+ "h-2 w-2 shrink-0 rounded-full",
156
+ !connected && "bg-warning-500 animate-pulse",
157
+ connected && attention && "bg-warning-500",
158
+ connected && !attention && "bg-success-500"
159
+ )
160
+ }
161
+ ),
162
+ !compact && /* @__PURE__ */ jsx("span", { children: statusText }),
163
+ !compact && attention && /* @__PURE__ */ jsxs("span", { className: "text-warning-700 dark:text-warning-400 truncate", children: [
164
+ "\xB7 ",
165
+ attention
166
+ ] }),
167
+ !compact && names.length > 0 && /* @__PURE__ */ jsx("span", { className: "truncate", children: `\xB7 ${labels.editing(names)}` })
168
+ ]
169
+ }
170
+ );
171
+ if (!showLog) return trigger;
172
+ return /* @__PURE__ */ jsxs(
173
+ "span",
174
+ {
175
+ className: "relative inline-flex items-center",
176
+ "data-slot": "collab-status",
177
+ children: [
178
+ trigger,
179
+ open && typeof document !== "undefined" && createPortal(
180
+ /* @__PURE__ */ jsxs(
181
+ "div",
182
+ {
183
+ ref: panelRef,
184
+ role: "dialog",
185
+ "aria-labelledby": titleId,
186
+ "data-slot": "collab-status-panel",
187
+ className: cn(
188
+ "bg-card text-card-foreground border-border fixed z-50 w-[26rem] max-w-[calc(100vw-1rem)]",
189
+ "rounded-lg border p-3 text-xs shadow-xl"
190
+ ),
191
+ style: {
192
+ top: pos?.top ?? 0,
193
+ left: pos?.left ?? 0,
194
+ visibility: pos ? void 0 : "hidden"
195
+ },
196
+ children: [
197
+ /* @__PURE__ */ jsxs("div", { className: "mb-2 flex items-center justify-between gap-2", children: [
198
+ /* @__PURE__ */ jsx("strong", { id: titleId, className: "text-foreground text-sm", children: labels.logTitle(log.length) }),
199
+ /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-0.5", children: [
200
+ /* @__PURE__ */ jsx(
201
+ "button",
202
+ {
203
+ type: "button",
204
+ className: cn(
205
+ "hover:text-foreground focus-visible:ring-ring rounded p-0.5 focus-visible:ring-2 focus-visible:outline-none",
206
+ wrapped ? "text-foreground bg-muted" : "text-muted-foreground"
207
+ ),
208
+ onClick: () => setWrapped((v) => !v),
209
+ "aria-pressed": wrapped,
210
+ "aria-label": labels.wrap,
211
+ title: labels.wrap,
212
+ "data-slot": "collab-status-wrap",
213
+ children: /* @__PURE__ */ jsx(WrapText, { className: "h-4 w-4", "aria-hidden": "true" })
214
+ }
215
+ ),
216
+ /* @__PURE__ */ jsx(
217
+ "button",
218
+ {
219
+ type: "button",
220
+ className: "text-muted-foreground hover:text-foreground focus-visible:ring-ring rounded p-0.5 focus-visible:ring-2 focus-visible:outline-none",
221
+ onClick: () => {
222
+ setOpen(false);
223
+ triggerRef.current?.focus();
224
+ },
225
+ "aria-label": labels.close,
226
+ children: /* @__PURE__ */ jsx(X, { className: "h-4 w-4", "aria-hidden": "true" })
227
+ }
228
+ )
229
+ ] })
230
+ ] }),
231
+ attention && /* @__PURE__ */ jsx(
232
+ "p",
233
+ {
234
+ "data-slot": "collab-status-attention",
235
+ className: "text-warning-700 dark:text-warning-400 mb-2",
236
+ children: attention
237
+ }
238
+ ),
239
+ room && /* @__PURE__ */ jsxs("dl", { className: "border-border text-muted-foreground mb-2 grid grid-cols-[auto_1fr] gap-x-3 gap-y-0.5 border-b pb-2", children: [
240
+ /* @__PURE__ */ jsx("dt", { className: "opacity-70", children: labels.roomTerm }),
241
+ /* @__PURE__ */ jsx("dd", { className: clip, title: room.name, children: room.name }),
242
+ room.url && /* @__PURE__ */ jsxs(Fragment, { children: [
243
+ /* @__PURE__ */ jsx("dt", { className: "opacity-70", children: labels.urlTerm }),
244
+ /* @__PURE__ */ jsx("dd", { className: clip, title: room.url, children: room.url })
245
+ ] }),
246
+ /* @__PURE__ */ jsx("dt", { className: "opacity-70", children: labels.clientTerm }),
247
+ /* @__PURE__ */ jsx("dd", { className: clip, title: clientLine, children: clientLine }),
248
+ room.userId && /* @__PURE__ */ jsxs(Fragment, { children: [
249
+ /* @__PURE__ */ jsx("dt", { className: "opacity-70", children: labels.userTerm }),
250
+ /* @__PURE__ */ jsx("dd", { className: clip, title: room.userId, children: room.userId })
251
+ ] })
252
+ ] }),
253
+ /* @__PURE__ */ jsxs("section", { className: "border-border mb-2 border-b pb-2", children: [
254
+ /* @__PURE__ */ jsx("strong", { className: "text-foreground mb-1 block", children: labels.peersTitle(peers.length) }),
255
+ peers.length === 0 ? /* @__PURE__ */ jsx("p", { className: "text-muted-foreground", children: labels.alone }) : /* @__PURE__ */ jsx(
256
+ "ul",
257
+ {
258
+ className: "flex flex-wrap gap-x-3 gap-y-1",
259
+ "data-slot": "collab-status-peers",
260
+ children: occupants.map((peer) => /* @__PURE__ */ jsxs("li", { className: "flex items-center gap-1.5", children: [
261
+ /* @__PURE__ */ jsx(
262
+ "span",
263
+ {
264
+ "aria-hidden": "true",
265
+ className: "h-2 w-2 shrink-0 rounded-full",
266
+ style: {
267
+ backgroundColor: peer.color ?? "currentColor"
268
+ }
269
+ }
270
+ ),
271
+ /* @__PURE__ */ jsx(
272
+ "span",
273
+ {
274
+ className: cn("text-foreground", clip),
275
+ title: peer.label,
276
+ children: peer.label
277
+ }
278
+ )
279
+ ] }, peer.label))
280
+ }
281
+ )
282
+ ] }),
283
+ log.length === 0 ? /* @__PURE__ */ jsx("p", { className: "text-muted-foreground", children: labels.empty }) : /* @__PURE__ */ jsx("ul", { className: "max-h-72 space-y-0.5 overflow-y-auto font-mono", children: log.map((e) => /* @__PURE__ */ jsxs(
284
+ "li",
285
+ {
286
+ className: "grid grid-cols-[auto_auto_1fr] gap-2",
287
+ children: [
288
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground opacity-70", children: new Date(e.at).toLocaleTimeString() }),
289
+ /* @__PURE__ */ jsxs(
290
+ "span",
291
+ {
292
+ className: cn(
293
+ "whitespace-nowrap",
294
+ e.origin === "remote" ? "text-primary-600 dark:text-primary-400" : KIND_TONE[e.kind]
295
+ ),
296
+ children: [
297
+ e.kind,
298
+ e.origin ? `/${e.origin}` : ""
299
+ ]
300
+ }
301
+ ),
302
+ /* @__PURE__ */ jsx(
303
+ "span",
304
+ {
305
+ className: cn("text-foreground", clip),
306
+ title: e.detail,
307
+ children: e.detail
308
+ }
309
+ )
310
+ ]
311
+ },
312
+ e.id
313
+ )) })
314
+ ]
315
+ }
316
+ ),
317
+ document.body
318
+ )
319
+ ]
320
+ }
321
+ );
322
+ }
323
+ function useYjsCollabStatus({
324
+ doc,
325
+ provider,
326
+ user,
327
+ roomName,
328
+ url,
329
+ userId,
330
+ logCap = 100
331
+ }) {
332
+ const [connected, setConnected] = React2.useState(false);
333
+ const [peers, setPeers] = React2.useState([]);
334
+ const [lastRemoteEdit, setLastRemoteEdit] = React2.useState(null);
335
+ const [log, setLog] = React2.useState([]);
336
+ const logIdRef = React2.useRef(0);
337
+ const awarenessRef = React2.useRef(null);
338
+ const selfNameRef = React2.useRef("");
339
+ const activitySeen = React2.useRef(/* @__PURE__ */ new Map());
340
+ const peerNames = React2.useRef(/* @__PURE__ */ new Map());
341
+ const pushLog = React2.useCallback(
342
+ (entry) => {
343
+ const full = {
344
+ id: ++logIdRef.current,
345
+ at: Date.now(),
346
+ ...entry
347
+ };
348
+ setLog((prev) => [full, ...prev].slice(0, logCap));
349
+ },
350
+ [logCap]
351
+ );
352
+ const selfName = user?.name?.trim();
353
+ const selfColor = user?.color;
354
+ React2.useEffect(() => {
355
+ if (!doc || !provider) {
356
+ setConnected(false);
357
+ setPeers([]);
358
+ setLastRemoteEdit(null);
359
+ return;
360
+ }
361
+ const awareness = provider.awareness;
362
+ awarenessRef.current = awareness;
363
+ activitySeen.current = /* @__PURE__ */ new Map();
364
+ peerNames.current = /* @__PURE__ */ new Map();
365
+ setConnected(provider.synced ?? false);
366
+ const onDocUpdate = (update, origin) => {
367
+ pushLog({
368
+ kind: "doc",
369
+ origin: origin === provider ? "remote" : "local",
370
+ detail: `doc update \xB7 ${update.byteLength} bytes`
371
+ });
372
+ };
373
+ doc.on("update", onDocUpdate);
374
+ const onSync = (isSynced) => {
375
+ setConnected(isSynced);
376
+ pushLog({
377
+ kind: "sync",
378
+ detail: isSynced ? "synced with server" : "disconnected"
379
+ });
380
+ };
381
+ provider.on("sync", onSync);
382
+ const onStatus = (event) => {
383
+ if (event?.status === "disconnected") setConnected(false);
384
+ };
385
+ provider.on("status", onStatus);
386
+ const onAwareness = () => {
387
+ const others = [];
388
+ const present = /* @__PURE__ */ new Map();
389
+ let freshest = null;
390
+ awareness.getStates().forEach((state, clientId) => {
391
+ if (clientId === awareness.clientID) return;
392
+ const peer = state.user;
393
+ if (peer?.name) {
394
+ others.push({ name: peer.name, color: peer.color });
395
+ present.set(clientId, peer.name);
396
+ }
397
+ const activity = state.activity;
398
+ if (activity && activity.at > (activitySeen.current.get(clientId) ?? 0)) {
399
+ activitySeen.current.set(clientId, activity.at);
400
+ if (!freshest || activity.at > freshest.at) {
401
+ const sameUser = !!peer?.name && peer.name === selfNameRef.current;
402
+ freshest = {
403
+ fields: activity.fields,
404
+ by: sameUser ? "You (another window)" : peer?.name,
405
+ at: activity.at
406
+ };
407
+ }
408
+ }
409
+ });
410
+ for (const [clientId, name] of present) {
411
+ if (!peerNames.current.has(clientId)) {
412
+ pushLog({
413
+ kind: "awareness",
414
+ origin: "remote",
415
+ detail: `${name} joined the room`
416
+ });
417
+ }
418
+ }
419
+ for (const [clientId, name] of peerNames.current) {
420
+ if (!present.has(clientId)) {
421
+ pushLog({
422
+ kind: "awareness",
423
+ origin: "remote",
424
+ detail: `${name} left the room`
425
+ });
426
+ }
427
+ }
428
+ peerNames.current = present;
429
+ setPeers(others);
430
+ if (freshest) {
431
+ const edit = freshest;
432
+ setLastRemoteEdit(edit);
433
+ pushLog({
434
+ kind: "awareness",
435
+ origin: "remote",
436
+ detail: `${edit.by ?? "peer"} edited ${edit.fields.join(", ")}`
437
+ });
438
+ }
439
+ };
440
+ awareness.on("change", onAwareness);
441
+ return () => {
442
+ doc.off("update", onDocUpdate);
443
+ provider.off("sync", onSync);
444
+ provider.off("status", onStatus);
445
+ awareness.off("change", onAwareness);
446
+ awarenessRef.current = null;
447
+ activitySeen.current = /* @__PURE__ */ new Map();
448
+ peerNames.current = /* @__PURE__ */ new Map();
449
+ setConnected(false);
450
+ setPeers([]);
451
+ setLastRemoteEdit(null);
452
+ setLog([]);
453
+ };
454
+ }, [doc, provider, pushLog]);
455
+ React2.useEffect(() => {
456
+ const awareness = awarenessRef.current;
457
+ if (!awareness) return;
458
+ const name = selfName || `User ${awareness.clientID}`;
459
+ selfNameRef.current = name;
460
+ awareness.setLocalStateField("user", { name, color: selfColor });
461
+ }, [provider, selfName, selfColor]);
462
+ const publishActivity = React2.useCallback(
463
+ (fields) => {
464
+ awarenessRef.current?.setLocalStateField("activity", {
465
+ at: Date.now(),
466
+ fields
467
+ });
468
+ pushLog({
469
+ kind: "patch",
470
+ origin: "local",
471
+ detail: `edited ${fields.join(", ")}`
472
+ });
473
+ },
474
+ [pushLog]
475
+ );
476
+ const room = doc && provider ? {
477
+ name: roomName ?? provider.roomname ?? "room",
478
+ url: url ?? provider.url,
479
+ clientId: doc.clientID,
480
+ userId
481
+ } : null;
482
+ return { connected, peers, log, room, lastRemoteEdit, publishActivity };
483
+ }
484
+
485
+ export { CollabStatus, defaultCollabStatusLabels, useYjsCollabStatus };
486
+ //# sourceMappingURL=chunk-3MGHTTZW.js.map
487
+ //# sourceMappingURL=chunk-3MGHTTZW.js.map