@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.
- package/dist/brands/index.cjs +7 -7
- package/dist/brands/index.js +2 -2
- package/dist/{chunk-Y3ZZEDIU.js → chunk-2YDKLURF.js} +25 -2
- package/dist/chunk-2YDKLURF.js.map +1 -0
- package/dist/chunk-3MGHTTZW.js +487 -0
- package/dist/chunk-3MGHTTZW.js.map +1 -0
- package/dist/{chunk-VIWEV6TJ.cjs → chunk-3OME4UHL.cjs} +25 -2
- package/dist/chunk-3OME4UHL.cjs.map +1 -0
- package/dist/chunk-6NXQSQ3A.cjs +511 -0
- package/dist/chunk-6NXQSQ3A.cjs.map +1 -0
- package/dist/{chunk-CYMZ2QS5.js → chunk-BCJFOSZX.js} +2 -2
- package/dist/{chunk-CYMZ2QS5.js.map → chunk-BCJFOSZX.js.map} +1 -1
- package/dist/{chunk-SNEQXSC5.cjs → chunk-VA7QN4DX.cjs} +2 -2
- package/dist/{chunk-SNEQXSC5.cjs.map → chunk-VA7QN4DX.cjs.map} +1 -1
- package/dist/components/CollabStatus/index.cjs +21 -0
- package/dist/components/CollabStatus/index.cjs.map +1 -0
- package/dist/components/CollabStatus/index.d.cts +222 -0
- package/dist/components/CollabStatus/index.d.ts +222 -0
- package/dist/components/CollabStatus/index.js +4 -0
- package/dist/components/CollabStatus/index.js.map +1 -0
- package/dist/index.cjs +68 -55
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +22 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.js +10 -9
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/tailwind-preset.cjs +4 -4
- package/dist/tailwind-preset.js +1 -1
- package/dist/utils/index.cjs +9 -9
- package/dist/utils/index.js +1 -1
- package/package.json +2 -1
- package/dist/chunk-VIWEV6TJ.cjs.map +0 -1
- package/dist/chunk-Y3ZZEDIU.js.map +0 -1
package/dist/brands/index.cjs
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
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
|
|
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; }
|
package/dist/brands/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { brands } from '../chunk-
|
|
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-
|
|
608
|
-
//# sourceMappingURL=chunk-
|
|
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
|