@graphysdk/react-renderer 1.9.0-beta.1789643389031 → 1.9.0-beta.1789721177023

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.
@@ -1 +1 @@
1
- @property --graphy-text-scale{syntax:"<number>";inherits:true;initial-value:1}@property --graphy-font-size-xxs{syntax:"<length>";inherits:true;initial-value:10px}@property --graphy-font-size-xs{syntax:"<length>";inherits:true;initial-value:11px}@property --graphy-font-size-sm{syntax:"<length>";inherits:true;initial-value:12px}@property --graphy-font-size-md{syntax:"<length>";inherits:true;initial-value:14px}@property --graphy-font-size-lg{syntax:"<length>";inherits:true;initial-value:16px}@property --graphy-font-size-xl{syntax:"<length>";inherits:true;initial-value:20px}@property --graphy-font-size-editor-body{syntax:"<length>";inherits:true;initial-value:15px}@property --graphy-font-size-heading-sm{syntax:"<length>";inherits:true;initial-value:18px}@property --graphy-font-size-heading-md{syntax:"<length>";inherits:true;initial-value:22px}@property --graphy-font-size-heading-lg{syntax:"<length>";inherits:true;initial-value:28px}._1d8mpa10{overflow:visible}._324dw20{filter:drop-shadow(0 2px 2px #0e0e3414)drop-shadow(0 0 2px #0f0f181f)}._1suo8ub0{filter:drop-shadow(0 4px 4px #0e0e3414)drop-shadow(0 0 4px #0f0f181f)}._16vokpr0{pointer-events:none;-webkit-user-select:none;user-select:none}._2qyyu60{flex-shrink:0;display:block;overflow:visible}._10igzta0{pointer-events:none;position:fixed;top:0;left:0}.bow4tg0{color:var(--graphy-text-primary);font-size:calc(10px * var(--graphy-text-scale));position:relative;overflow:hidden}.bow4tg1{color:var(--graphy-text-primary);font-size:calc(10px * var(--graphy-text-scale));display:contents}.bow4tg2{background-color:var(--graphy-graph-background);position:absolute;top:0;bottom:0;left:0;right:0}.bow4tg2[data-graph-mode=point-and-edit]{-webkit-user-select:none;user-select:none}.bow4tg3{outline:none}.bow4tg4{background-image:linear-gradient(45deg, color-mix(in srgb, var(--graphy-text-primary) 5%, transparent) 25%, transparent 25%, transparent 75%, color-mix(in srgb, var(--graphy-text-primary) 5%, transparent) 75%, color-mix(in srgb, var(--graphy-text-primary) 5%, transparent)), linear-gradient(45deg, color-mix(in srgb, var(--graphy-text-primary) 5%, transparent) 25%, transparent 25%, transparent 75%, color-mix(in srgb, var(--graphy-text-primary) 5%, transparent) 75%, color-mix(in srgb, var(--graphy-text-primary) 5%, transparent));background-position:0 0,1em 1em;background-size:2em 2em}._1ii3bsb0{--graphy-transparent:transparent;--graphy-white:#fff;--graphy-black:#000;--graphy-gray-100:#fff;--graphy-gray-95:#fcfcfc;--graphy-gray-90:#fafafa;--graphy-gray-85:#f5f5f5;--graphy-gray-80:#f0f0f0;--graphy-gray-75:#e8e8e8;--graphy-gray-70:#e5e5e5;--graphy-gray-60:#ccc;--graphy-gray-50:#c4c4c4;--graphy-gray-0:#1d2129;--graphy-red-60:#e14b49;--graphy-red-50:#f93939;--graphy-amber-70:#ffba8c;--graphy-amber-50:#ffc849;--graphy-amber-40:#feae47;--graphy-amber-30:#e7a816;--graphy-green-60:#06b299;--graphy-green-50:#42cd69;--graphy-blue-80:#2e62ff;--graphy-blue-60:#3d70ff;--graphy-purple-50:#7b56ea;--graphy-purple-30:#e093fe;--graphy-gray-gradient-80:linear-gradient(to top, #f0f0f1, #f9f9ff);--graphy-text-primary:var(--graphy-black);--graphy-text-secondary:color-mix(in srgb, transparent, var(--graphy-text-primary) 60%);--graphy-text-disabled:color-mix(in srgb, transparent, var(--graphy-text-primary) 50%);--graphy-icon-primary:currentColor;--graphy-icon-secondary:color-mix(in srgb, transparent, var(--graphy-text-primary) 60%);--graphy-icon-sticker-background:var(--graphy-gray-100);--graphy-brand:var(--graphy-purple-50);--graphy-success:var(--graphy-green-50);--graphy-warning:var(--graphy-amber-50);--graphy-alert:var(--graphy-red-50);--graphy-border-100:var(--graphy-gray-0);--graphy-border-50:color-mix(in srgb, transparent, var(--graphy-gray-0) 50%);--graphy-border-10:color-mix(in srgb, transparent, var(--graphy-gray-0) 10%);--graphy-sunken-background:var(--graphy-gray-90);--graphy-default-background:var(--graphy-gray-100);--graphy-raised-background:var(--graphy-gray-85);--graphy-overlay-background:var(--graphy-gray-100);--graphy-overlay-border-gradient:var(--graphy-border-10);--graphy-elevation-xs:0 0 2px #0f0f181f, 0 2px 2px #0e0e3414;--graphy-elevation-sm:0 0 4px #0f0f181f, 0 4px 4px #0e0e3414;--graphy-elevation-md:0 0 8px #0f0f181f, 0 8px 8px #0e0e3414;--graphy-elevation-lg:0 0 16px #0f0f181f, 0 16px 16px #0e0e3414;--graphy-radii-xs:4px;--graphy-radii-sm:6px;--graphy-radii-md:8px;--graphy-radii-lg:12px;--graphy-space-xxs:2px;--graphy-space-xs:4px;--graphy-space-sm:6px;--graphy-space-md:8px;--graphy-space-lg:12px;--graphy-space-xl:16px;--graphy-z-index-toolbar:10;--graphy-z-index-toolbar-tooltip:20;--graphy-z-index-toolbar-popover:30;--graphy-z-index-editor-popover:950;--graphy-graph-background:var(--graphy-gray-100);--graphy-legend-focus-outline-color:var(--graphy-border-50);--graphy-toolbar-background-color:var(--graphy-overlay-background);--graphy-toolbar-button-background-color:transparent;--graphy-toolbar-button-background-color-hovered:var(--graphy-gray-80);--graphy-toolbar-button-background-color-selected:var(--graphy-gray-60);--graphy-toolbar-separator-color:var(--graphy-gray-60);--graphy-annotation-frame-border-color:var(--graphy-blue-60);--graphy-edit-menu-trigger-icon-color:#3d414c;--graphy-canvas-default:#000;--graphy-canvas-blue:#3b82f6;--graphy-canvas-cyan:#06b6d4;--graphy-canvas-green:#10b981;--graphy-canvas-yellow:#e5b400;--graphy-canvas-orange:#f97316;--graphy-canvas-red:#ef4444;--graphy-canvas-pink:#e845bf;--graphy-canvas-purple:#8b5cf6;--graphy-canvas-gray:#78716c;--graphy-canvas-inverse:#fff;--graphy-tooltip-row-gap:4px;--graphy-editor-control-height:32px;--graphy-legend-swatch-gap:8px;--graphy-headline-row-gap:2px;--graphy-text-scale:1;--graphy-font-family:"Stack Sans Text", "Inter", -apple-system, BlinkMacSystemFont, "Open Sans", "Segoe UI", "Roboto", "Oxygen-Sans", "Ubuntu", "Cantarell", "Helvetica Neue", "NotoSansArabic", "NotoSansJP", "NotoSansSC", "NotoSansKR", "NotoSerifKR", sans-serif, "Apple Color Emoji", "NotoColorEmoji";--graphy-font-family-heading:"Stack Sans Text", "Inter", -apple-system, BlinkMacSystemFont, "Open Sans", "Segoe UI", "Roboto", "Oxygen-Sans", "Ubuntu", "Cantarell", "Helvetica Neue", "NotoSansArabic", "NotoSansJP", "NotoSansSC", "NotoSansKR", "NotoSerifKR", sans-serif, "Apple Color Emoji", "NotoColorEmoji";--graphy-font-weight-regular:400;--graphy-font-weight-medium:500;--graphy-font-weight-semibold:600;--graphy-font-weight-bold:700;--graphy-font-weight-extra-bold:800;--graphy-font-size-xxs:1em;--graphy-font-size-xs:1.1em;--graphy-font-size-sm:1.2em;--graphy-font-size-md:1.4em;--graphy-font-size-lg:1.6em;--graphy-font-size-xl:2em;--graphy-font-line-height-xxs:1;--graphy-font-line-height-xs:1;--graphy-font-line-height-sm:1.3;--graphy-font-line-height-md:1.43;--graphy-font-line-height-lg:1;--graphy-font-line-height-xl:1;--graphy-font-size-editor-body:1.5em;--graphy-font-size-heading-sm:1.8em;--graphy-font-size-heading-md:2.2em;--graphy-font-size-heading-lg:2.8em;--graphy-font-line-height-editor-body:1.47;--graphy-font-line-height-heading-sm:1.25;--graphy-font-line-height-heading-md:1.41;--graphy-font-line-height-heading-lg:1.29;--graphy-font-uitooltip:var(--graphy-font-weight-medium) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-uitooltip-secondary:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-button:var(--graphy-font-weight-medium) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-input:var(--graphy-font-weight-medium) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-input-label:var(--graphy-font-weight-medium) var(--graphy-font-size-xxs)/var(--graphy-font-line-height-xxs) var(--graphy-font-family);--graphy-font-select-label:var(--graphy-font-weight-medium) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-select-description:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-color-select-label:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-menu-title:var(--graphy-font-weight-semibold) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-menu-group-title:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-menu-item-label:var(--graphy-font-weight-medium) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-menu-item-label-secondary:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-error-boundary-title:var(--graphy-font-weight-semibold) var(--graphy-font-size-heading-sm)/var(--graphy-font-line-height-heading-sm) var(--graphy-font-family);--graphy-font-error-boundary-message:var(--graphy-font-weight-medium) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-table-cell:var(--graphy-font-weight-medium) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-table-header-cell:var(--graphy-font-weight-semibold) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-source-label:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-source-link:var(--graphy-font-weight-regular) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-text-editor-h1:var(--graphy-font-weight-bold) var(--graphy-font-size-heading-lg)/var(--graphy-font-line-height-heading-lg) var(--graphy-font-family-heading);--graphy-font-text-editor-h2:var(--graphy-font-weight-bold) var(--graphy-font-size-heading-md)/var(--graphy-font-line-height-heading-md) var(--graphy-font-family-heading);--graphy-font-text-editor-h3:var(--graphy-font-weight-semibold) var(--graphy-font-size-heading-sm)/var(--graphy-font-line-height-heading-sm) var(--graphy-font-family-heading);--graphy-font-text-editor-h6:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-text-editor-body:var(--graphy-font-weight-medium) var(--graphy-font-size-editor-body)/var(--graphy-font-line-height-editor-body) var(--graphy-font-family);--graphy-font-text-editor-link:var(--graphy-font-weight-regular) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-highlight-mode-title:var(--graphy-font-weight-bold) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-highlight-mode-subtitle:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-editor-control-label:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-editor-control-value:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-editor-section-title:var(--graphy-font-weight-semibold) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-editor-caption:var(--graphy-font-weight-medium) var(--graphy-font-size-xxs)/var(--graphy-font-line-height-xxs) var(--graphy-font-family)}._1ii3bsb1{--graphy-transparent:transparent;--graphy-white:#fff;--graphy-black:#000;--graphy-gray-100:#000;--graphy-gray-95:#0d0d0d;--graphy-gray-90:#1a1a1a;--graphy-gray-85:#1f1f1f;--graphy-gray-80:#2a2a2a;--graphy-gray-75:#2e2e2e;--graphy-gray-70:#353535;--graphy-gray-60:#494949;--graphy-gray-50:#6f6f6f;--graphy-gray-0:#fff;--graphy-red-60:#cb3333;--graphy-red-50:#f93939;--graphy-amber-70:#f48135;--graphy-amber-50:#feae47;--graphy-amber-40:#ffc849;--graphy-amber-30:#ffd061;--graphy-green-60:#0ac600;--graphy-green-50:#42cd69;--graphy-blue-80:#2e62ff;--graphy-blue-60:#3d70ff;--graphy-purple-50:#7b56ea;--graphy-purple-30:#e093fe;--graphy-gray-gradient-80:linear-gradient(to top, #222429, #31353f);--graphy-text-primary:var(--graphy-gray-0);--graphy-text-secondary:color-mix(in srgb, transparent, var(--graphy-text-primary) 80%);--graphy-text-disabled:color-mix(in srgb, transparent, var(--graphy-text-primary) 50%);--graphy-icon-primary:currentColor;--graphy-icon-secondary:color-mix(in srgb, transparent, var(--graphy-text-primary) 60%);--graphy-icon-sticker-background:var(--graphy-gray-70);--graphy-border-100:var(--graphy-gray-0);--graphy-border-50:color-mix(in srgb, transparent, var(--graphy-gray-0) 50%);--graphy-border-10:color-mix(in srgb, transparent, var(--graphy-gray-0) 10%);--graphy-brand:var(--graphy-purple-50);--graphy-success:var(--graphy-green-50);--graphy-warning:var(--graphy-amber-50);--graphy-alert:var(--graphy-red-50);--graphy-sunken-background:var(--graphy-gray-100);--graphy-default-background:var(--graphy-gray-90);--graphy-raised-background:var(--graphy-gray-80);--graphy-overlay-background:var(--graphy-gray-90);--graphy-overlay-border-gradient:var(--graphy-gray-gradient-80);--graphy-elevation-xs:0 0 2px #0f0f181f, 0 2px 2px #0e0e3414;--graphy-elevation-sm:0 0 4px #0f0f181f, 0 4px 4px #0e0e3414;--graphy-elevation-md:0 0 8px #0f0f181f, 0 8px 8px #0e0e3414;--graphy-elevation-lg:0 0 16px #0f0f181f, 0 16px 16px #0e0e3414;--graphy-radii-xs:4px;--graphy-radii-sm:6px;--graphy-radii-md:8px;--graphy-radii-lg:12px;--graphy-space-xxs:2px;--graphy-space-xs:4px;--graphy-space-sm:6px;--graphy-space-md:8px;--graphy-space-lg:12px;--graphy-space-xl:16px;--graphy-z-index-toolbar:10;--graphy-z-index-toolbar-tooltip:20;--graphy-z-index-toolbar-popover:30;--graphy-z-index-editor-popover:950;--graphy-graph-background:var(--graphy-gray-90);--graphy-legend-focus-outline-color:var(--graphy-border-50);--graphy-toolbar-background-color:var(--graphy-overlay-background);--graphy-toolbar-button-background-color:transparent;--graphy-toolbar-button-background-color-hovered:var(--graphy-gray-80);--graphy-toolbar-button-background-color-selected:var(--graphy-gray-60);--graphy-toolbar-separator-color:var(--graphy-gray-60);--graphy-annotation-frame-border-color:var(--graphy-blue-60);--graphy-edit-menu-trigger-icon-color:var(--graphy-white);--graphy-canvas-default:#fff;--graphy-canvas-blue:#60a5fa;--graphy-canvas-cyan:#22d3ee;--graphy-canvas-green:#34d399;--graphy-canvas-yellow:#ffc800;--graphy-canvas-orange:#fb923c;--graphy-canvas-red:#f87171;--graphy-canvas-pink:#f979d9;--graphy-canvas-purple:#a78bfa;--graphy-canvas-gray:#a8a29e;--graphy-canvas-inverse:#000;--graphy-tooltip-row-gap:4px;--graphy-editor-control-height:32px;--graphy-legend-swatch-gap:8px;--graphy-headline-row-gap:2px;--graphy-text-scale:1;--graphy-font-family:"Stack Sans Text", "Inter", -apple-system, BlinkMacSystemFont, "Open Sans", "Segoe UI", "Roboto", "Oxygen-Sans", "Ubuntu", "Cantarell", "Helvetica Neue", "NotoSansArabic", "NotoSansJP", "NotoSansSC", "NotoSansKR", "NotoSerifKR", sans-serif, "Apple Color Emoji", "NotoColorEmoji";--graphy-font-family-heading:"Stack Sans Text", "Inter", -apple-system, BlinkMacSystemFont, "Open Sans", "Segoe UI", "Roboto", "Oxygen-Sans", "Ubuntu", "Cantarell", "Helvetica Neue", "NotoSansArabic", "NotoSansJP", "NotoSansSC", "NotoSansKR", "NotoSerifKR", sans-serif, "Apple Color Emoji", "NotoColorEmoji";--graphy-font-weight-regular:400;--graphy-font-weight-medium:500;--graphy-font-weight-semibold:600;--graphy-font-weight-bold:700;--graphy-font-weight-extra-bold:800;--graphy-font-size-xxs:1em;--graphy-font-size-xs:1.1em;--graphy-font-size-sm:1.2em;--graphy-font-size-md:1.4em;--graphy-font-size-lg:1.6em;--graphy-font-size-xl:2em;--graphy-font-line-height-xxs:1;--graphy-font-line-height-xs:1;--graphy-font-line-height-sm:1.3;--graphy-font-line-height-md:1.43;--graphy-font-line-height-lg:1;--graphy-font-line-height-xl:1;--graphy-font-size-editor-body:1.5em;--graphy-font-size-heading-sm:1.8em;--graphy-font-size-heading-md:2.2em;--graphy-font-size-heading-lg:2.8em;--graphy-font-line-height-editor-body:1.47;--graphy-font-line-height-heading-sm:1.25;--graphy-font-line-height-heading-md:1.41;--graphy-font-line-height-heading-lg:1.29;--graphy-font-uitooltip:var(--graphy-font-weight-medium) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-uitooltip-secondary:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-button:var(--graphy-font-weight-medium) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-input:var(--graphy-font-weight-medium) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-input-label:var(--graphy-font-weight-medium) var(--graphy-font-size-xxs)/var(--graphy-font-line-height-xxs) var(--graphy-font-family);--graphy-font-select-label:var(--graphy-font-weight-medium) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-select-description:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-color-select-label:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-menu-title:var(--graphy-font-weight-semibold) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-menu-group-title:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-menu-item-label:var(--graphy-font-weight-medium) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-menu-item-label-secondary:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-error-boundary-title:var(--graphy-font-weight-semibold) var(--graphy-font-size-heading-sm)/var(--graphy-font-line-height-heading-sm) var(--graphy-font-family);--graphy-font-error-boundary-message:var(--graphy-font-weight-medium) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-table-cell:var(--graphy-font-weight-medium) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-table-header-cell:var(--graphy-font-weight-semibold) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-source-label:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-source-link:var(--graphy-font-weight-regular) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-text-editor-h1:var(--graphy-font-weight-bold) var(--graphy-font-size-heading-lg)/var(--graphy-font-line-height-heading-lg) var(--graphy-font-family-heading);--graphy-font-text-editor-h2:var(--graphy-font-weight-bold) var(--graphy-font-size-heading-md)/var(--graphy-font-line-height-heading-md) var(--graphy-font-family-heading);--graphy-font-text-editor-h3:var(--graphy-font-weight-semibold) var(--graphy-font-size-heading-sm)/var(--graphy-font-line-height-heading-sm) var(--graphy-font-family-heading);--graphy-font-text-editor-h6:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-text-editor-body:var(--graphy-font-weight-medium) var(--graphy-font-size-editor-body)/var(--graphy-font-line-height-editor-body) var(--graphy-font-family);--graphy-font-text-editor-link:var(--graphy-font-weight-regular) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-highlight-mode-title:var(--graphy-font-weight-bold) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-highlight-mode-subtitle:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-editor-control-label:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-editor-control-value:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-editor-section-title:var(--graphy-font-weight-semibold) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-editor-caption:var(--graphy-font-weight-medium) var(--graphy-font-size-xxs)/var(--graphy-font-line-height-xxs) var(--graphy-font-family)}._1cocly40{color:inherit;text-underline-offset:.15em;text-decoration:underline}._19519k80{flex-direction:column;gap:4px;min-width:120px;max-width:280px;display:flex}._19519k81{white-space:normal;overflow-wrap:anywhere}._19519k82{flex-direction:column;display:flex}._19519k83{padding-block:var(--graphy-tooltip-row-gap);flex-direction:row;align-items:center;gap:8px;display:flex}._19519k84{flex-shrink:0;display:block;overflow:visible}._19519k85{width:12px;height:12px}._19519k86{white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}._19519k87{font-variant-numeric:tabular-nums;white-space:nowrap;text-align:right}._19519k88{pointer-events:none;-webkit-user-select:none;user-select:none;z-index:1000;position:fixed;top:0;left:0}.vultop0{box-sizing:border-box;white-space:nowrap;color:#2a2a28;opacity:.62;background-color:#ffffff8c;border-radius:999px;flex-shrink:0;align-items:center;gap:10px;height:22px;padding-inline-start:9px;padding-inline-end:11px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:11.5px;line-height:1;text-decoration:none;transition:opacity .12s,max-width .25s,padding .25s,gap .25s;display:inline-flex;box-shadow:0 1px 4px #00000017}.vultop0:hover{opacity:1}.vultop0:focus-visible{opacity:1}.vultop0:focus-visible{outline-offset:2px;outline:2px solid #2a2a28}.vultop0[data-zone=mid]{opacity:.8;background-color:#ffffffbf}.vultop0[data-zone=dark]{opacity:.85;color:#fff;box-shadow:none;background-color:#ffffff14}.vultop0[data-zone=dark]:focus-visible{outline:2px solid #fff}.vultop0[data-visual=mini]{justify-content:center;gap:0;width:22px;padding-inline-start:0;padding-inline-end:0}.vultop0[data-visual=mini]:hover{gap:10px;width:auto;padding-inline-start:9px;padding-inline-end:11px}.vultop0[data-visual=mini]:focus-visible{gap:10px;width:auto;padding-inline-start:9px;padding-inline-end:11px}.vultop1{flex-direction:row-reverse}.vultop2{flex-shrink:0;justify-content:center;align-items:center;width:9px;height:12px;display:inline-flex}.vultop3{object-fit:contain;width:9px;height:12px;display:block}.vultop0[data-zone=dark] .vultop3{filter:invert()}.vultop4{align-items:baseline;gap:.3em;max-width:120px;transition:max-width .25s,opacity .25s;display:inline-flex;overflow:hidden}.vultop0[data-visual=mini] .vultop4{opacity:0;max-width:0}.vultop0[data-visual=mini]:hover .vultop4{opacity:1;max-width:120px}.vultop0[data-visual=mini]:focus-visible .vultop4{opacity:1;max-width:120px}.vultop5{font-weight:550}.vultop6{place-self:end}.vultop7{position:absolute;top:50%;right:0;transform:translateY(-50%)}@media (prefers-reduced-motion:reduce){.vultop0,.vultop4{transition:none}}._4dlrid0{margin:0}._4dlrid0 :-webkit-any(h1,h2,h3,p){font:inherit;color:inherit;margin:0}._4dlrid0 :is(h1,h2,h3,p){font:inherit;color:inherit;margin:0}.xfz7dq0{position:absolute}.xfz7dq1{align-items:end;column-gap:var(--graphy-space-xs);color:var(--graphy-text-secondary);grid-template-columns:minmax(0,1fr) auto;display:grid}.xfz7dq2{min-width:0}.xfz7dq3{overflow-wrap:anywhere;text-decoration:underline}.xfz7dq3:hover{color:var(--graphy-text-primary)}.xfz7dq4{margin-right:var(--graphy-space-xs)}.xfz7dq5{overflow-wrap:anywhere}._1k4qtbg0{position:absolute}._1k4qtbg1{padding-right:110px}._1u9qprb0{pointer-events:none;justify-content:start;align-items:start;display:flex;position:absolute}._1u9qprb1{pointer-events:none;justify-content:center;align-items:center;display:flex;position:absolute}._9aen060{align-items:baseline;gap:4px;display:flex}._9aen061,._9aen062{align-items:center;gap:4px;display:flex}._9aen063{align-items:start;gap:var(--graphy-headline-row-gap);flex-direction:column;display:flex}.asohov0{flex-shrink:0}.asohov1{color:var(--graphy-icon-primary)}.asohov2{color:var(--graphy-icon-secondary)}.n7clvo0{white-space:nowrap}.n7clvo1{color:var(--graphy-text-secondary)}.n7clvo2{white-space:nowrap}.n7clvo3{border-radius:50%;justify-content:center;align-items:center;width:12px;height:12px;display:flex}.n7clvo4{transform:rotate(180deg)}._1oj6yix0{pointer-events:none;height:100%;position:relative}._1oj6yix1{pointer-events:none;position:absolute;top:0;left:0;overflow:visible}._1oj6yix2{white-space:nowrap;position:absolute;transform:translateY(-50%)}._6a636s0{pointer-events:none;position:absolute}._1kjk02r0{pointer-events:auto;flex-shrink:0;align-items:center;display:inline-flex;position:relative}._1kjk02r1{padding-inline-start:4px}._1kjk02r2{padding-inline-start:8px}._1kjk02r3{padding-block-start:4px}._1kjk02r4{padding-block-start:8px}._1kjk02r5{pointer-events:none;opacity:.6;position:absolute}._1kjk02r6{top:0;bottom:0}._1kjk02r6:not(:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){left:4px;right:0}._1kjk02r6:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){left:4px;right:0}._1kjk02r6:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){left:0;right:4px}._1kjk02r6:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){left:0;right:4px}._1kjk02r7{top:0;bottom:0}._1kjk02r7:not(:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){left:8px;right:0}._1kjk02r7:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){left:8px;right:0}._1kjk02r7:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){left:0;right:8px}._1kjk02r7:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){left:0;right:8px}._1kjk02r8{top:4px;bottom:0;left:0;right:0}._1kjk02r9{top:8px;bottom:0;left:0;right:0}._1kjk02ra{white-space:nowrap;cursor:pointer;pointer-events:auto;-webkit-appearance:none;appearance:none;background:0 0;border:none;align-items:center;padding:0;display:inline-flex;position:relative}._1kjk02ra:focus-visible{outline:1px solid var(--graphy-legend-focus-outline-color)}._1kjk02rb{font-variant-numeric:tabular-nums}._1kjk02rc{pointer-events:auto;z-index:40;max-width:320px;max-height:240px;overflow-y:auto}._1kjk02rd{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}._1kjk02re{align-items:center;gap:var(--graphy-legend-swatch-gap);white-space:nowrap;display:flex}._1kjk02rf{cursor:pointer}._1dw9dgx0{opacity:.7;border-radius:50%}._1cecisi0{pointer-events:none;flex-wrap:nowrap;align-items:center;block-size:100%;inline-size:100%;display:flex}._1cecisi1{flex-direction:row}._1cecisi2{flex-direction:column}._1cecisi3{justify-content:flex-start}._1cecisi4{justify-content:center}._1cecisi5{justify-content:flex-end}._1cecisi6{align-items:flex-start}._1cecisi7{align-items:flex-end}._1cecisi8{align-items:center;gap:var(--graphy-legend-swatch-gap);white-space:nowrap;flex-shrink:0;display:flex}._1cecisi9{pointer-events:auto;cursor:pointer}._1i8rg6j0{cursor:pointer}._1aj6s5s0{pointer-events:auto;font-family:var(--graphy-font-family);word-wrap:break-word;white-space:break-spaces;text-align:center;box-sizing:border-box;width:100%}._1aj6s5s0 p,._1aj6s5s0 h1,._1aj6s5s0 h2,._1aj6s5s0 h3{margin:0}._1aj6s5s1 .ProseMirror{outline:none;min-height:1em}._1aj6s5s1 .ProseMirror .is-empty:before{content:attr(data-placeholder);color:currentColor;opacity:.4;float:left;pointer-events:none;height:0}.ph8bdc0{pointer-events:none}.ph8bdc1{flex-shrink:0;align-items:center;display:flex}.ph8bdc2{font-family:var(--graphy-font-family)}.ph8bdc3{box-sizing:border-box;white-space:nowrap;-webkit-user-select:none;user-select:none;flex-direction:row;align-items:center;gap:5px;width:100%;height:100%;display:flex}.ph8bdc4{pointer-events:auto}.ph8bdc5,._1agclyl0,._1agclyl1{pointer-events:none}._1agclyl2{pointer-events:none;font-variant-numeric:tabular-nums}.to1jkx2{stroke-linecap:round;overflow:visible}.to1jkx3{transition:opacity .15s ease-out,filter .15s ease-out}[data-hover-active=true] .to1jkx3{opacity:var(--to1jkx0,.4);filter:var(--to1jkx1,none)}._17uhij30{position:absolute;top:0;left:0;overflow:visible}
1
+ @property --graphy-text-scale{syntax:"<number>";inherits:true;initial-value:1}@property --graphy-font-size-xxs{syntax:"<length>";inherits:true;initial-value:10px}@property --graphy-font-size-xs{syntax:"<length>";inherits:true;initial-value:11px}@property --graphy-font-size-sm{syntax:"<length>";inherits:true;initial-value:12px}@property --graphy-font-size-md{syntax:"<length>";inherits:true;initial-value:14px}@property --graphy-font-size-lg{syntax:"<length>";inherits:true;initial-value:16px}@property --graphy-font-size-xl{syntax:"<length>";inherits:true;initial-value:20px}@property --graphy-font-size-editor-body{syntax:"<length>";inherits:true;initial-value:15px}@property --graphy-font-size-heading-sm{syntax:"<length>";inherits:true;initial-value:18px}@property --graphy-font-size-heading-md{syntax:"<length>";inherits:true;initial-value:22px}@property --graphy-font-size-heading-lg{syntax:"<length>";inherits:true;initial-value:28px}._1d8mpa10{overflow:visible}._324dw20{filter:drop-shadow(0 2px 2px #0e0e3414)drop-shadow(0 0 2px #0f0f181f)}._1suo8ub0{filter:drop-shadow(0 4px 4px #0e0e3414)drop-shadow(0 0 4px #0f0f181f)}._16vokpr0{pointer-events:none;-webkit-user-select:none;user-select:none}._2qyyu60{flex-shrink:0;display:block;overflow:visible}._10igzta0{pointer-events:none;position:fixed;top:0;left:0}.bow4tg0{color:var(--graphy-text-primary);font-size:calc(10px * var(--graphy-text-scale));position:relative;overflow:hidden}.bow4tg1{color:var(--graphy-text-primary);font-size:calc(10px * var(--graphy-text-scale));display:contents}.bow4tg2{background-color:var(--graphy-graph-background);position:absolute;top:0;bottom:0;left:0;right:0}.bow4tg2[data-graph-mode=point-and-edit]{-webkit-user-select:none;user-select:none}.bow4tg3{outline:none}.bow4tg4{background-image:linear-gradient(45deg, color-mix(in srgb, var(--graphy-text-primary) 5%, transparent) 25%, transparent 25%, transparent 75%, color-mix(in srgb, var(--graphy-text-primary) 5%, transparent) 75%, color-mix(in srgb, var(--graphy-text-primary) 5%, transparent)), linear-gradient(45deg, color-mix(in srgb, var(--graphy-text-primary) 5%, transparent) 25%, transparent 25%, transparent 75%, color-mix(in srgb, var(--graphy-text-primary) 5%, transparent) 75%, color-mix(in srgb, var(--graphy-text-primary) 5%, transparent));background-position:0 0,1em 1em;background-size:2em 2em}._1ii3bsb0{--graphy-transparent:transparent;--graphy-white:#fff;--graphy-black:#000;--graphy-gray-100:#fff;--graphy-gray-95:#fcfcfc;--graphy-gray-90:#fafafa;--graphy-gray-85:#f5f5f5;--graphy-gray-80:#f0f0f0;--graphy-gray-75:#e8e8e8;--graphy-gray-70:#e5e5e5;--graphy-gray-60:#ccc;--graphy-gray-50:#c4c4c4;--graphy-gray-0:#1d2129;--graphy-red-60:#e14b49;--graphy-red-50:#f93939;--graphy-amber-70:#ffba8c;--graphy-amber-50:#ffc849;--graphy-amber-40:#feae47;--graphy-amber-30:#e7a816;--graphy-green-60:#06b299;--graphy-green-50:#42cd69;--graphy-blue-80:#2e62ff;--graphy-blue-60:#3d70ff;--graphy-purple-50:#7b56ea;--graphy-purple-30:#e093fe;--graphy-gray-gradient-80:linear-gradient(to top, #f0f0f1, #f9f9ff);--graphy-text-primary:var(--graphy-black);--graphy-text-secondary:color-mix(in srgb, transparent, var(--graphy-text-primary) 60%);--graphy-text-disabled:color-mix(in srgb, transparent, var(--graphy-text-primary) 50%);--graphy-icon-primary:currentColor;--graphy-icon-secondary:color-mix(in srgb, transparent, var(--graphy-text-primary) 60%);--graphy-icon-sticker-background:var(--graphy-gray-100);--graphy-brand:var(--graphy-purple-50);--graphy-success:var(--graphy-green-50);--graphy-warning:var(--graphy-amber-50);--graphy-alert:var(--graphy-red-50);--graphy-border-100:var(--graphy-gray-0);--graphy-border-50:color-mix(in srgb, transparent, var(--graphy-gray-0) 50%);--graphy-border-10:color-mix(in srgb, transparent, var(--graphy-gray-0) 10%);--graphy-sunken-background:var(--graphy-gray-90);--graphy-default-background:var(--graphy-gray-100);--graphy-raised-background:var(--graphy-gray-85);--graphy-overlay-background:var(--graphy-gray-100);--graphy-overlay-border-gradient:var(--graphy-border-10);--graphy-elevation-xs:0 0 2px #0f0f181f, 0 2px 2px #0e0e3414;--graphy-elevation-sm:0 0 4px #0f0f181f, 0 4px 4px #0e0e3414;--graphy-elevation-md:0 0 8px #0f0f181f, 0 8px 8px #0e0e3414;--graphy-elevation-lg:0 0 16px #0f0f181f, 0 16px 16px #0e0e3414;--graphy-radii-xs:4px;--graphy-radii-sm:6px;--graphy-radii-md:8px;--graphy-radii-lg:12px;--graphy-space-xxs:2px;--graphy-space-xs:4px;--graphy-space-sm:6px;--graphy-space-md:8px;--graphy-space-lg:12px;--graphy-space-xl:16px;--graphy-z-index-toolbar:10;--graphy-z-index-toolbar-tooltip:20;--graphy-z-index-toolbar-popover:30;--graphy-z-index-editor-popover:950;--graphy-graph-background:var(--graphy-gray-100);--graphy-legend-focus-outline-color:var(--graphy-border-50);--graphy-toolbar-background-color:var(--graphy-overlay-background);--graphy-toolbar-button-background-color:transparent;--graphy-toolbar-button-background-color-hovered:var(--graphy-gray-80);--graphy-toolbar-button-background-color-selected:var(--graphy-gray-60);--graphy-toolbar-separator-color:var(--graphy-gray-60);--graphy-annotation-outline-color:var(--graphy-blue-60);--graphy-edit-menu-trigger-icon-color:#3d414c;--graphy-canvas-default:#000;--graphy-canvas-blue:#3b82f6;--graphy-canvas-cyan:#06b6d4;--graphy-canvas-green:#10b981;--graphy-canvas-yellow:#e5b400;--graphy-canvas-orange:#f97316;--graphy-canvas-red:#ef4444;--graphy-canvas-pink:#e845bf;--graphy-canvas-purple:#8b5cf6;--graphy-canvas-gray:#78716c;--graphy-canvas-inverse:#fff;--graphy-tooltip-row-gap:4px;--graphy-editor-control-height:32px;--graphy-legend-swatch-gap:8px;--graphy-headline-row-gap:2px;--graphy-text-scale:1;--graphy-font-family:"Stack Sans Text", "Inter", -apple-system, BlinkMacSystemFont, "Open Sans", "Segoe UI", "Roboto", "Oxygen-Sans", "Ubuntu", "Cantarell", "Helvetica Neue", "NotoSansArabic", "NotoSansJP", "NotoSansSC", "NotoSansKR", "NotoSerifKR", sans-serif, "Apple Color Emoji", "NotoColorEmoji";--graphy-font-family-heading:"Stack Sans Text", "Inter", -apple-system, BlinkMacSystemFont, "Open Sans", "Segoe UI", "Roboto", "Oxygen-Sans", "Ubuntu", "Cantarell", "Helvetica Neue", "NotoSansArabic", "NotoSansJP", "NotoSansSC", "NotoSansKR", "NotoSerifKR", sans-serif, "Apple Color Emoji", "NotoColorEmoji";--graphy-font-weight-regular:400;--graphy-font-weight-medium:500;--graphy-font-weight-semibold:600;--graphy-font-weight-bold:700;--graphy-font-weight-extra-bold:800;--graphy-font-size-xxs:1em;--graphy-font-size-xs:1.1em;--graphy-font-size-sm:1.2em;--graphy-font-size-md:1.4em;--graphy-font-size-lg:1.6em;--graphy-font-size-xl:2em;--graphy-font-line-height-xxs:1;--graphy-font-line-height-xs:1;--graphy-font-line-height-sm:1.3;--graphy-font-line-height-md:1.43;--graphy-font-line-height-lg:1;--graphy-font-line-height-xl:1;--graphy-font-size-editor-body:1.5em;--graphy-font-size-heading-sm:1.8em;--graphy-font-size-heading-md:2.2em;--graphy-font-size-heading-lg:2.8em;--graphy-font-line-height-editor-body:1.47;--graphy-font-line-height-heading-sm:1.25;--graphy-font-line-height-heading-md:1.41;--graphy-font-line-height-heading-lg:1.29;--graphy-font-uitooltip:var(--graphy-font-weight-medium) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-uitooltip-secondary:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-button:var(--graphy-font-weight-medium) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-input:var(--graphy-font-weight-medium) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-input-label:var(--graphy-font-weight-medium) var(--graphy-font-size-xxs)/var(--graphy-font-line-height-xxs) var(--graphy-font-family);--graphy-font-select-label:var(--graphy-font-weight-medium) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-select-description:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-color-select-label:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-menu-title:var(--graphy-font-weight-semibold) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-menu-group-title:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-menu-item-label:var(--graphy-font-weight-medium) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-menu-item-label-secondary:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-error-boundary-title:var(--graphy-font-weight-semibold) var(--graphy-font-size-heading-sm)/var(--graphy-font-line-height-heading-sm) var(--graphy-font-family);--graphy-font-error-boundary-message:var(--graphy-font-weight-medium) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-table-cell:var(--graphy-font-weight-medium) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-table-header-cell:var(--graphy-font-weight-semibold) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-source-label:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-source-link:var(--graphy-font-weight-regular) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-text-editor-h1:var(--graphy-font-weight-bold) var(--graphy-font-size-heading-lg)/var(--graphy-font-line-height-heading-lg) var(--graphy-font-family-heading);--graphy-font-text-editor-h2:var(--graphy-font-weight-bold) var(--graphy-font-size-heading-md)/var(--graphy-font-line-height-heading-md) var(--graphy-font-family-heading);--graphy-font-text-editor-h3:var(--graphy-font-weight-semibold) var(--graphy-font-size-heading-sm)/var(--graphy-font-line-height-heading-sm) var(--graphy-font-family-heading);--graphy-font-text-editor-h6:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-text-editor-body:var(--graphy-font-weight-medium) var(--graphy-font-size-editor-body)/var(--graphy-font-line-height-editor-body) var(--graphy-font-family);--graphy-font-text-editor-link:var(--graphy-font-weight-regular) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-highlight-mode-title:var(--graphy-font-weight-bold) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-highlight-mode-subtitle:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-editor-control-label:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-editor-control-value:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-editor-section-title:var(--graphy-font-weight-semibold) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-editor-caption:var(--graphy-font-weight-medium) var(--graphy-font-size-xxs)/var(--graphy-font-line-height-xxs) var(--graphy-font-family)}._1ii3bsb1{--graphy-transparent:transparent;--graphy-white:#fff;--graphy-black:#000;--graphy-gray-100:#000;--graphy-gray-95:#0d0d0d;--graphy-gray-90:#1a1a1a;--graphy-gray-85:#1f1f1f;--graphy-gray-80:#2a2a2a;--graphy-gray-75:#2e2e2e;--graphy-gray-70:#353535;--graphy-gray-60:#494949;--graphy-gray-50:#6f6f6f;--graphy-gray-0:#fff;--graphy-red-60:#cb3333;--graphy-red-50:#f93939;--graphy-amber-70:#f48135;--graphy-amber-50:#feae47;--graphy-amber-40:#ffc849;--graphy-amber-30:#ffd061;--graphy-green-60:#0ac600;--graphy-green-50:#42cd69;--graphy-blue-80:#2e62ff;--graphy-blue-60:#3d70ff;--graphy-purple-50:#7b56ea;--graphy-purple-30:#e093fe;--graphy-gray-gradient-80:linear-gradient(to top, #222429, #31353f);--graphy-text-primary:var(--graphy-gray-0);--graphy-text-secondary:color-mix(in srgb, transparent, var(--graphy-text-primary) 80%);--graphy-text-disabled:color-mix(in srgb, transparent, var(--graphy-text-primary) 50%);--graphy-icon-primary:currentColor;--graphy-icon-secondary:color-mix(in srgb, transparent, var(--graphy-text-primary) 60%);--graphy-icon-sticker-background:var(--graphy-gray-70);--graphy-border-100:var(--graphy-gray-0);--graphy-border-50:color-mix(in srgb, transparent, var(--graphy-gray-0) 50%);--graphy-border-10:color-mix(in srgb, transparent, var(--graphy-gray-0) 10%);--graphy-brand:var(--graphy-purple-50);--graphy-success:var(--graphy-green-50);--graphy-warning:var(--graphy-amber-50);--graphy-alert:var(--graphy-red-50);--graphy-sunken-background:var(--graphy-gray-100);--graphy-default-background:var(--graphy-gray-90);--graphy-raised-background:var(--graphy-gray-80);--graphy-overlay-background:var(--graphy-gray-90);--graphy-overlay-border-gradient:var(--graphy-gray-gradient-80);--graphy-elevation-xs:0 0 2px #0f0f181f, 0 2px 2px #0e0e3414;--graphy-elevation-sm:0 0 4px #0f0f181f, 0 4px 4px #0e0e3414;--graphy-elevation-md:0 0 8px #0f0f181f, 0 8px 8px #0e0e3414;--graphy-elevation-lg:0 0 16px #0f0f181f, 0 16px 16px #0e0e3414;--graphy-radii-xs:4px;--graphy-radii-sm:6px;--graphy-radii-md:8px;--graphy-radii-lg:12px;--graphy-space-xxs:2px;--graphy-space-xs:4px;--graphy-space-sm:6px;--graphy-space-md:8px;--graphy-space-lg:12px;--graphy-space-xl:16px;--graphy-z-index-toolbar:10;--graphy-z-index-toolbar-tooltip:20;--graphy-z-index-toolbar-popover:30;--graphy-z-index-editor-popover:950;--graphy-graph-background:var(--graphy-gray-90);--graphy-legend-focus-outline-color:var(--graphy-border-50);--graphy-toolbar-background-color:var(--graphy-overlay-background);--graphy-toolbar-button-background-color:transparent;--graphy-toolbar-button-background-color-hovered:var(--graphy-gray-80);--graphy-toolbar-button-background-color-selected:var(--graphy-gray-60);--graphy-toolbar-separator-color:var(--graphy-gray-60);--graphy-annotation-outline-color:var(--graphy-blue-60);--graphy-edit-menu-trigger-icon-color:var(--graphy-white);--graphy-canvas-default:#fff;--graphy-canvas-blue:#60a5fa;--graphy-canvas-cyan:#22d3ee;--graphy-canvas-green:#34d399;--graphy-canvas-yellow:#ffc800;--graphy-canvas-orange:#fb923c;--graphy-canvas-red:#f87171;--graphy-canvas-pink:#f979d9;--graphy-canvas-purple:#a78bfa;--graphy-canvas-gray:#a8a29e;--graphy-canvas-inverse:#000;--graphy-tooltip-row-gap:4px;--graphy-editor-control-height:32px;--graphy-legend-swatch-gap:8px;--graphy-headline-row-gap:2px;--graphy-text-scale:1;--graphy-font-family:"Stack Sans Text", "Inter", -apple-system, BlinkMacSystemFont, "Open Sans", "Segoe UI", "Roboto", "Oxygen-Sans", "Ubuntu", "Cantarell", "Helvetica Neue", "NotoSansArabic", "NotoSansJP", "NotoSansSC", "NotoSansKR", "NotoSerifKR", sans-serif, "Apple Color Emoji", "NotoColorEmoji";--graphy-font-family-heading:"Stack Sans Text", "Inter", -apple-system, BlinkMacSystemFont, "Open Sans", "Segoe UI", "Roboto", "Oxygen-Sans", "Ubuntu", "Cantarell", "Helvetica Neue", "NotoSansArabic", "NotoSansJP", "NotoSansSC", "NotoSansKR", "NotoSerifKR", sans-serif, "Apple Color Emoji", "NotoColorEmoji";--graphy-font-weight-regular:400;--graphy-font-weight-medium:500;--graphy-font-weight-semibold:600;--graphy-font-weight-bold:700;--graphy-font-weight-extra-bold:800;--graphy-font-size-xxs:1em;--graphy-font-size-xs:1.1em;--graphy-font-size-sm:1.2em;--graphy-font-size-md:1.4em;--graphy-font-size-lg:1.6em;--graphy-font-size-xl:2em;--graphy-font-line-height-xxs:1;--graphy-font-line-height-xs:1;--graphy-font-line-height-sm:1.3;--graphy-font-line-height-md:1.43;--graphy-font-line-height-lg:1;--graphy-font-line-height-xl:1;--graphy-font-size-editor-body:1.5em;--graphy-font-size-heading-sm:1.8em;--graphy-font-size-heading-md:2.2em;--graphy-font-size-heading-lg:2.8em;--graphy-font-line-height-editor-body:1.47;--graphy-font-line-height-heading-sm:1.25;--graphy-font-line-height-heading-md:1.41;--graphy-font-line-height-heading-lg:1.29;--graphy-font-uitooltip:var(--graphy-font-weight-medium) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-uitooltip-secondary:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-button:var(--graphy-font-weight-medium) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-input:var(--graphy-font-weight-medium) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-input-label:var(--graphy-font-weight-medium) var(--graphy-font-size-xxs)/var(--graphy-font-line-height-xxs) var(--graphy-font-family);--graphy-font-select-label:var(--graphy-font-weight-medium) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-select-description:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-color-select-label:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-menu-title:var(--graphy-font-weight-semibold) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-menu-group-title:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-menu-item-label:var(--graphy-font-weight-medium) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-menu-item-label-secondary:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-error-boundary-title:var(--graphy-font-weight-semibold) var(--graphy-font-size-heading-sm)/var(--graphy-font-line-height-heading-sm) var(--graphy-font-family);--graphy-font-error-boundary-message:var(--graphy-font-weight-medium) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-table-cell:var(--graphy-font-weight-medium) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-table-header-cell:var(--graphy-font-weight-semibold) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-source-label:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-source-link:var(--graphy-font-weight-regular) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-text-editor-h1:var(--graphy-font-weight-bold) var(--graphy-font-size-heading-lg)/var(--graphy-font-line-height-heading-lg) var(--graphy-font-family-heading);--graphy-font-text-editor-h2:var(--graphy-font-weight-bold) var(--graphy-font-size-heading-md)/var(--graphy-font-line-height-heading-md) var(--graphy-font-family-heading);--graphy-font-text-editor-h3:var(--graphy-font-weight-semibold) var(--graphy-font-size-heading-sm)/var(--graphy-font-line-height-heading-sm) var(--graphy-font-family-heading);--graphy-font-text-editor-h6:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-text-editor-body:var(--graphy-font-weight-medium) var(--graphy-font-size-editor-body)/var(--graphy-font-line-height-editor-body) var(--graphy-font-family);--graphy-font-text-editor-link:var(--graphy-font-weight-regular) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-highlight-mode-title:var(--graphy-font-weight-bold) var(--graphy-font-size-md)/var(--graphy-font-line-height-md) var(--graphy-font-family);--graphy-font-highlight-mode-subtitle:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-editor-control-label:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-editor-control-value:var(--graphy-font-weight-medium) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-editor-section-title:var(--graphy-font-weight-semibold) var(--graphy-font-size-sm)/var(--graphy-font-line-height-sm) var(--graphy-font-family);--graphy-font-editor-caption:var(--graphy-font-weight-medium) var(--graphy-font-size-xxs)/var(--graphy-font-line-height-xxs) var(--graphy-font-family)}._1cocly40{color:inherit;text-underline-offset:.15em;text-decoration:underline}._19519k80{flex-direction:column;gap:4px;min-width:120px;max-width:280px;display:flex}._19519k81{white-space:normal;overflow-wrap:anywhere}._19519k82{flex-direction:column;display:flex}._19519k83{padding-block:var(--graphy-tooltip-row-gap);flex-direction:row;align-items:center;gap:8px;display:flex}._19519k84{flex-shrink:0;display:block;overflow:visible}._19519k85{width:12px;height:12px}._19519k86{white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}._19519k87{font-variant-numeric:tabular-nums;white-space:nowrap;text-align:right}._19519k88{pointer-events:none;-webkit-user-select:none;user-select:none;z-index:1000;position:fixed;top:0;left:0}.vultop0{box-sizing:border-box;white-space:nowrap;color:#2a2a28;opacity:.62;background-color:#ffffff8c;border-radius:999px;flex-shrink:0;align-items:center;gap:10px;height:22px;padding-inline-start:9px;padding-inline-end:11px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,system-ui,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;font-size:11.5px;line-height:1;text-decoration:none;transition:opacity .12s,max-width .25s,padding .25s,gap .25s;display:inline-flex;box-shadow:0 1px 4px #00000017}.vultop0:hover{opacity:1}.vultop0:focus-visible{opacity:1}.vultop0:focus-visible{outline-offset:2px;outline:2px solid #2a2a28}.vultop0[data-zone=mid]{opacity:.8;background-color:#ffffffbf}.vultop0[data-zone=dark]{opacity:.85;color:#fff;box-shadow:none;background-color:#ffffff14}.vultop0[data-zone=dark]:focus-visible{outline:2px solid #fff}.vultop0[data-visual=mini]{justify-content:center;gap:0;width:22px;padding-inline-start:0;padding-inline-end:0}.vultop0[data-visual=mini]:hover{gap:10px;width:auto;padding-inline-start:9px;padding-inline-end:11px}.vultop0[data-visual=mini]:focus-visible{gap:10px;width:auto;padding-inline-start:9px;padding-inline-end:11px}.vultop1{flex-direction:row-reverse}.vultop2{flex-shrink:0;justify-content:center;align-items:center;width:9px;height:12px;display:inline-flex}.vultop3{object-fit:contain;width:9px;height:12px;display:block}.vultop0[data-zone=dark] .vultop3{filter:invert()}.vultop4{align-items:baseline;gap:.3em;max-width:120px;transition:max-width .25s,opacity .25s;display:inline-flex;overflow:hidden}.vultop0[data-visual=mini] .vultop4{opacity:0;max-width:0}.vultop0[data-visual=mini]:hover .vultop4{opacity:1;max-width:120px}.vultop0[data-visual=mini]:focus-visible .vultop4{opacity:1;max-width:120px}.vultop5{font-weight:550}.vultop6{place-self:end}.vultop7{position:absolute;top:50%;right:0;transform:translateY(-50%)}@media (prefers-reduced-motion:reduce){.vultop0,.vultop4{transition:none}}._4dlrid0{margin:0}._4dlrid0 :-webkit-any(h1,h2,h3,p){font:inherit;color:inherit;margin:0}._4dlrid0 :is(h1,h2,h3,p){font:inherit;color:inherit;margin:0}.xfz7dq0{position:absolute}.xfz7dq1{align-items:end;column-gap:var(--graphy-space-xs);color:var(--graphy-text-secondary);grid-template-columns:minmax(0,1fr) auto;display:grid}.xfz7dq2{min-width:0}.xfz7dq3{overflow-wrap:anywhere;text-decoration:underline}.xfz7dq3:hover{color:var(--graphy-text-primary)}.xfz7dq4{margin-right:var(--graphy-space-xs)}.xfz7dq5{overflow-wrap:anywhere}._1k4qtbg0{position:absolute}._1k4qtbg1{padding-right:110px}._1u9qprb0{pointer-events:none;justify-content:start;align-items:start;display:flex;position:absolute}._1u9qprb1{pointer-events:none;justify-content:center;align-items:center;display:flex;position:absolute}._9aen060{align-items:baseline;gap:4px;display:flex}._9aen061,._9aen062{align-items:center;gap:4px;display:flex}._9aen063{align-items:start;gap:var(--graphy-headline-row-gap);flex-direction:column;display:flex}.asohov0{flex-shrink:0}.asohov1{color:var(--graphy-icon-primary)}.asohov2{color:var(--graphy-icon-secondary)}.n7clvo0{white-space:nowrap}.n7clvo1{color:var(--graphy-text-secondary)}.n7clvo2{white-space:nowrap}.n7clvo3{border-radius:50%;justify-content:center;align-items:center;width:12px;height:12px;display:flex}.n7clvo4{transform:rotate(180deg)}._1oj6yix0{pointer-events:none;height:100%;position:relative}._1oj6yix1{pointer-events:none;position:absolute;top:0;left:0;overflow:visible}._1oj6yix2{white-space:nowrap;position:absolute;transform:translateY(-50%)}._1oj6yix3{pointer-events:auto;cursor:pointer;margin-left:-3px;padding:3px}._6a636s0{pointer-events:none;position:absolute}._1kjk02r0{pointer-events:auto;flex-shrink:0;align-items:center;display:inline-flex;position:relative}._1kjk02r1{padding-inline-start:4px}._1kjk02r2{padding-inline-start:8px}._1kjk02r3{padding-block-start:4px}._1kjk02r4{padding-block-start:8px}._1kjk02r5{pointer-events:none;opacity:.6;position:absolute}._1kjk02r6{top:0;bottom:0}._1kjk02r6:not(:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){left:4px;right:0}._1kjk02r6:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){left:4px;right:0}._1kjk02r6:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){left:0;right:4px}._1kjk02r6:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){left:0;right:4px}._1kjk02r7{top:0;bottom:0}._1kjk02r7:not(:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){left:8px;right:0}._1kjk02r7:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){left:8px;right:0}._1kjk02r7:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){left:0;right:8px}._1kjk02r7:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){left:0;right:8px}._1kjk02r8{top:4px;bottom:0;left:0;right:0}._1kjk02r9{top:8px;bottom:0;left:0;right:0}._1kjk02ra{white-space:nowrap;cursor:pointer;pointer-events:auto;-webkit-appearance:none;appearance:none;background:0 0;border:none;align-items:center;padding:0;display:inline-flex;position:relative}._1kjk02ra:focus-visible{outline:1px solid var(--graphy-legend-focus-outline-color)}._1kjk02rb{font-variant-numeric:tabular-nums}._1kjk02rc{pointer-events:auto;z-index:40;max-width:320px;max-height:240px;overflow-y:auto}._1kjk02rd{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}._1kjk02re{align-items:center;gap:var(--graphy-legend-swatch-gap);white-space:nowrap;display:flex}._1kjk02rf{cursor:pointer}._1dw9dgx0{opacity:.7;border-radius:50%}._1cecisi0{pointer-events:none;flex-wrap:nowrap;align-items:center;block-size:100%;inline-size:100%;display:flex}._1cecisi1{flex-direction:row}._1cecisi2{flex-direction:column}._1cecisi3{justify-content:flex-start}._1cecisi4{justify-content:center}._1cecisi5{justify-content:flex-end}._1cecisi6{align-items:flex-start}._1cecisi7{align-items:flex-end}._1cecisi8{align-items:center;gap:var(--graphy-legend-swatch-gap);white-space:nowrap;flex-shrink:0;display:flex}._1cecisi9{pointer-events:auto;cursor:pointer}._1i8rg6j0{cursor:pointer}._1aj6s5s0{pointer-events:auto;font-family:var(--graphy-font-family);word-wrap:break-word;white-space:break-spaces;text-align:center;box-sizing:border-box;width:100%}._1aj6s5s0 p,._1aj6s5s0 h1,._1aj6s5s0 h2,._1aj6s5s0 h3{margin:0}._1aj6s5s1 .ProseMirror{outline:none;min-height:1em}._1aj6s5s1 .ProseMirror .is-empty:before{content:attr(data-placeholder);color:currentColor;opacity:.4;float:left;pointer-events:none;height:0}.ph8bdc0{pointer-events:none}.ph8bdc1{flex-shrink:0;align-items:center;display:flex}.ph8bdc2{font-family:var(--graphy-font-family)}.ph8bdc3{box-sizing:border-box;white-space:nowrap;-webkit-user-select:none;user-select:none;flex-direction:row;align-items:center;gap:5px;width:100%;height:100%;display:flex}.ph8bdc4{pointer-events:auto}.ph8bdc5,._1agclyl0,._1agclyl1{pointer-events:none}._1agclyl2{pointer-events:none;font-variant-numeric:tabular-nums}.to1jkx2{stroke-linecap:round;overflow:visible}.to1jkx3{transition:opacity .15s ease-out,filter .15s ease-out}[data-hover-active=true] .to1jkx3{opacity:var(--to1jkx0,.4);filter:var(--to1jkx1,none)}._17uhij30{position:absolute;top:0;left:0;overflow:visible}
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('./index.css');const c=require("./history-chords-CgQJHeIs.cjs"),se=require("./theme.contract.css-Dd-73-Je.cjs");let m=require("@graphysdk/viz-engine"),d=require("react"),a=require("react/jsx-runtime"),U=require("zustand"),B=require("zustand/vanilla"),$=require("clsx");$=c.__toESM($,1);var ne="_1a5iqpb0",oe="_1a5iqpb1";var ae="_1a5iqpb3",ie="_1a5iqpb4",ce="_1a5iqpb5";var L=({errors:e})=>{const[t,...s]=e;return(0,a.jsxs)("div",{role:"alert",className:ne,children:[(0,a.jsx)("strong",{className:oe,children:"This chart could not be rendered."}),t&&(0,a.jsx)(Y,{diagnostic:t}),s.length>0&&(0,a.jsx)("ul",{className:"_1a5iqpb2",children:s.map((r,o)=>(0,a.jsx)("li",{children:(0,a.jsx)(Y,{diagnostic:r})},`${r.code}-${o}`))})]})},Y=({diagnostic:e})=>(0,a.jsxs)("div",{className:ae,children:[(0,a.jsx)("span",{className:ie,children:e.code}),(0,a.jsx)("p",{className:ce,children:e.message}),e.suggestion&&(0,a.jsx)("p",{className:"_1a5iqpb6",children:e.suggestion})]});function le(e=[],t=[]){return e.length===t.length&&e.every((s,r)=>Object.is(s,t[r]))}var z=class extends d.Component{constructor(...e){super(...e),this.state={caughtDiagnostic:null}}static getDerivedStateFromError(e){return{caughtDiagnostic:(0,m.buildDiagnostic)(e)}}componentDidCatch(e,t){const s=(0,m.buildDiagnostic)(e);c.logDiagnostics([s]),this.props.onError?.([s]),console.error("Chart render component stack:",t.componentStack)}componentDidUpdate(e){this.state.caughtDiagnostic&&!le(e.resetKeys,this.props.resetKeys)&&this.setState({caughtDiagnostic:null})}render(){const{caughtDiagnostic:e}=this.state;if(e)return(0,a.jsx)(L,{errors:[e]});const{forcedErrors:t,children:s}=this.props;return t&&t.length>0?(0,a.jsx)(L,{errors:t}):s}},X=e=>typeof e=="object"&&"geom"in e&&"render"in e,de=e=>{const t=(0,m.resolveDefinition)(e);return t instanceof m.Geom?t:null},Q=(e,t)=>{const s=e.filter(r=>ue(r,t));return s.length===e.length?e:s},ue=(e,t)=>e.kind==="annotation"?(0,m.findAnnotation)(t.annotations,e.id)!==null:e.kind==="observations"||e.kind==="layer"&&e.layerId!==void 0?(0,m.findLayerById)(t.layers,e.layerId)!==void 0:!0,F=[],he=()=>(0,B.createStore)(e=>({selection:F,setSelection:t=>e(s=>ge(s.selection,t)?s:{selection:t}),clearSelection:()=>e(t=>t.selection.length===0?t:{selection:F})})),ge=(e,t)=>e===t?!0:e.length!==t.length?!1:e.every((s,r)=>{const o=t[r];return o!==void 0&&(0,m.areEditTargetsEqual)(s,o)}),me=process.env.NODE_ENV!=="production",pe=5,ve=e=>{if(!me)return{emit:()=>{},subscribe:()=>ye,getLastTrigger:()=>null,getLastCompile:()=>null,getCacheStats:()=>e.getCacheStats()};const t=new Set;let s=null;return{emit:r=>{const o=e.getLastCompile();if(o){s=r;for(const l of t)l(r,o)}},subscribe:r=>(t.add(r),()=>{t.delete(r)}),getLastTrigger:()=>s,getLastCompile:()=>e.getLastCompile(),getCacheStats:()=>e.getCacheStats()}},fe=()=>(0,B.createStore)(e=>({lastCompile:null,history:[],nextId:1,lastSnapshot:null,recordCompile:(t,s)=>e(r=>{if(r.lastSnapshot===s)return r;const o={id:r.nextId,label:Se(t),stages:s.stages,stageDurationsMs:s.stageDurationsMs,durationMs:s.durationMs};return{lastCompile:o,history:be(r.history,o,pe),nextId:r.nextId+1,lastSnapshot:s}})})),ye=()=>{},Se=e=>{switch(e.kind){case"init":return"init";case"spec":return"spec change";case"data":return"data change";case"command":return e.command.metadata.description}},be=(e,t,s)=>{const r=e.length>=s?e.length-(s-1):0;return[...e.slice(r),t]};function Ee(e){const t=e.filter(X),s=new Set([...Object.keys(c.BUILT_IN_GEOM_RENDERERS),...t.map(u=>u.geom)]),r=[],o=new Set;for(const u of e){const g=de(u);g===null||s.has(g.type)||o.has(g.type)||(o.add(g.type),r.push({kind:"user-input",severity:"error",code:"MISSING_GEOM_RENDERER",message:`Custom geom '${g.type}' is registered but has no renderer.`,context:{requested:g.type,kind:"geom-renderer"},suggestion:`Add a render half for it: \`defineGeomRenderer(${g.type}Geom, { coord, render })\`, then include it in \`plugins\`.`}))}const l=new Map;for(const u of t){if("definition"in u)continue;const g=`${u.geom}|${u.coord}`,p=l.get(g);p?p.count+=1:l.set(g,{geom:u.geom,coord:u.coord,count:1})}const i=[];for(const{geom:u,coord:g,count:p}of l.values())p<2||i.push({kind:"user-input",severity:"warning",code:"DUPLICATE_REGISTERED_TYPE",message:`Multiple render-only overrides register ('${u}', '${g}') (${p} entries); the last in the array wins.`,context:{requested:`${u}@${g}`,kind:"geom-renderer"},suggestion:`Keep a single render-only override for ('${u}', '${g}').`});return{errors:r,warnings:i}}function xe(e,t){const{coordSystem:s,layers:r}=e,o=new Set,l=[];for(const i of r)t(i.geom,s.type)!==null||o.has(i.geom)||(o.add(i.geom),l.push({kind:"user-input",severity:"warning",code:"MISSING_GEOM_RENDERER",message:`No renderer for geom '${i.geom}' under ${s.type} coords; the layer is not painted.`,context:{requested:i.geom,kind:"geom-renderer"},suggestion:`Register a renderer for ('${i.geom}', '${s.type}') via \`defineGeomRenderer\`.`}));return l}function Te(e,t){const{coordSystem:s,layers:r}=e,o=new Set,l=[];for(const i of r){if(i.interactive===!1||i.spatialKind!=="render-hit-test"||o.has(i.geom))continue;const u=t(i.geom,s.type);u===null||u.hitTest||c.isOverlayHosted(u)||(o.add(i.geom),l.push({kind:"user-input",severity:"warning",code:"MISSING_RENDER_HIT_TEST",message:`Geom '${i.geom}' declares spatialKind 'render-hit-test' but its renderer provides no hit-test; the layer has no hover.`,context:{requested:i.geom,kind:"geom-renderer"},suggestion:`Add a \`hitTest\` factory (precomputed geometry) or an overlay render (\`{ fn, options: { overlay: true } }\`, live simulation) to the renderer for ('${i.geom}', '${s.type}').`}))}return l}function Ce(e){const t=new Set,s=[];for(const r of e.layers){const o=r.identityKey;r.interactive!==!1&&(r.spatialKind!=="render-hit-test"||typeof o!="object"||t.has(r.geom)||r.data.hasVariable(o.variable)||(t.add(r.geom),s.push({kind:"user-input",severity:"warning",code:"RENDER_HIT_TEST_IDENTITY",message:`Geom '${r.geom}' keys its identity on '${o.variable}', a column its compile output does not emit; its hover lookup is empty.`,context:{requested:r.geom,kind:"geom-renderer"},suggestion:`Emit the '${o.variable}' column from the geom's \`compile()\`, or point \`identityKey\` at a column it does emit.`})))}return s}function Re(e,t){const{coordSystem:s,layers:r}=e,o=new Set,l=[];for(const i of r){if(i.interactive===!1||i.spatialKind!=="render-hit-test"||o.has(i.geom))continue;const u=t(i.geom,s.type);u===null||!u.hitTest||!c.isOverlayHosted(u)||(o.add(i.geom),l.push({kind:"user-input",severity:"warning",code:"CONFLICTING_RENDER_HIT_TEST",message:`Geom '${i.geom}' declares both a \`hitTest\` factory and an overlay render; these are alternatives, so only the overlay is used.`,context:{requested:i.geom,kind:"geom-renderer"},suggestion:"Keep one: a `hitTest` factory for precomputed geometry, OR an overlay render (`{ fn, options: { overlay: true } }`) for a live simulation."}))}return l}function Ge(e,t){const s=new Set,r=[];for(const o of e.layers)o.interactive!==!1&&(o.spatialKind!=="render-hit-test"||s.has(o.geom)||t.hasCapability(o.geom)||(s.add(o.geom),r.push({kind:"user-input",severity:"warning",code:"MISSING_ANCHOR_CAPABILITY",message:`Geom '${o.geom}' declares no \`resolveAnchorPosition\`; its observations cannot be annotated, so the editor overlay paints no creation trigger on them.`,context:{requested:o.geom,kind:"geom-renderer"},suggestion:"Implement `resolveAnchorPosition(observation, context)` on the geom, returning the normalised panel position an annotation on that observation belongs at."})));return r}function qe(e,t){const{coordSystem:s,layers:r}=e,o=new Set,l=[];for(const i of r){if(i.interactive===!1||i.spatialKind==="render-hit-test"||o.has(i.geom))continue;const u=t(i.geom,s.type);u===null||!c.isOverlayHosted(u)||(o.add(i.geom),l.push({kind:"user-input",severity:"warning",code:"OVERLAY_REQUIRES_RENDER_HIT_TEST",message:`Geom '${i.geom}' declares an overlay render but its layer's spatialKind is '${i.spatialKind}', not 'render-hit-test'; the overlay's push-path hover resolves to nothing.`,context:{requested:i.geom,kind:"geom-renderer"},suggestion:"Have the geom's manifest yield spatialKind 'render-hit-test' so the scene layer carries the `byKey` index the overlay's `pushHover` resolves against."}))}return l}var ke=e=>(0,B.createStore)(t=>({scene:e,setScene:s=>t(r=>r.scene===s?r:{scene:s})})),Ne=({spec:e,data:t,customPalettes:s,colorScheme:r,plugins:o,resolveRenderer:l,anchorResolver:i,onSpecChange:u,onError:g,onWarnings:p})=>{const T=c.useLatestRef(u),k=c.useLatestRef(g),G=c.useLatestRef(p),[{session:v,compileBus:h}]=(0,d.useState)(()=>{const n=(0,m.createCompiler)({plugins:o});return{session:new m.GraphCompilationSession(n),compileBus:ve(n)}}),[y]=(0,d.useState)(()=>Ee(o??[])),S=(0,d.useRef)(null),[N]=(0,d.useState)(je),C=(0,d.useRef)(null),b=(0,d.useCallback)(n=>y.errors.length===0?n:[...y.errors,...n??[]],[y]),_=(0,d.useCallback)(n=>{if(!n.ok)return n.errors;if(C.current)C.current.getState().setScene(n.scene);else{const f=ke(n.scene);f.subscribe(N.notify),C.current=f,N.notify()}return null},[N]),[w,D]=(0,d.useState)(()=>{const n=v.compile({spec:e,data:t,customPalettes:s,colorScheme:r});return S.current=n,b(_(n))}),q=(0,d.useCallback)(n=>n.ok?[...n.warnings,...xe(n.scene,l),...Te(n.scene,l),...Ce(n.scene),...Re(n.scene,l),...qe(n.scene,l),...Ge(n.scene,i)]:n.warnings,[l,i]),E=(0,d.useCallback)(n=>{n.length!==0&&(c.logDiagnostics(n),k.current?.(n))},[k]),R=(0,d.useCallback)(n=>{n.length!==0&&(c.logDiagnostics(n),G.current?.(n))},[G]);(0,d.useEffect)(()=>{const n=S.current;n&&(E([...y.errors,...n.ok?[]:n.errors]),R([...y.warnings,...q(n)]),n.ok&&h.emit({kind:"init"}))},[h,E,R,y,q]),(0,d.useEffect)(()=>{const n=v.update({spec:e,data:t,customPalettes:s,colorScheme:r});if(!n)return;n.committedSpec&&T.current?.(n.committedSpec);const f=_(n.result);D(b(f)),f&&E(f),R(q(n.result)),f||h.emit({kind:n.specChanged?"spec":"data"})},[e,t,s,r,v,h,_,E,R,b,q,T]);const j=(0,d.useCallback)(n=>{D(f=>f===null?f:b(null)),R(q(n))},[b,R,q]),H=(0,d.useCallback)(n=>{n.scene&&C.current?.getState().setScene(n.scene),n.result&&j(n.result),n.command&&h.emit({kind:"command",command:n.command}),n.spec&&T.current?.(n.spec),n.errors&&E([...n.errors])},[j,h,T,E]),x=(0,d.useCallback)(n=>{for(const f of n)H(f);return n.some(f=>!!f.scene)},[H]),P=(0,d.useCallback)((n,f)=>{x(v.applyCommand(n,f))},[v,x]),ee=(0,d.useCallback)(()=>{x(v.commit())},[v,x]),A=(0,d.useCallback)(()=>x(v.undo()),[v,x]),K=(0,d.useCallback)(()=>x(v.redo()),[v,x]),te=(0,d.useMemo)(()=>({stack:v.history,undo:A,redo:K}),[v,A,K]),re=(0,d.useCallback)(()=>C.current?.getState().scene??null,[]);return{store:C.current,dispatch:P,commit:ee,history:te,subscribe:N.subscribe,getScene:re,compileBus:h,compileErrors:w}},je=()=>{const e=new Set;return{subscribe:t=>(e.add(t),()=>{e.delete(t)}),notify:()=>e.forEach(t=>t())}},J=({data:e,spec:t,plugins:s=[],formattingLocale:r,handleRef:o,onSpecChange:l,onError:i,onWarnings:u,customPalettes:g,colorScheme:p="light",children:T})=>{const[k]=(0,d.useState)(()=>c.createGeomRendererResolver(s.filter(X))),G=(0,d.useId)(),[v]=(0,d.useState)(()=>(0,m.createAnchorResolver)(s)),[h]=(0,d.useState)(()=>he()),y=(0,d.useMemo)(()=>(0,m.createStyleResolver)({colorScheme:p}),[p]),{store:S,dispatch:N,commit:C,history:b,subscribe:_,getScene:w,compileBus:D,compileErrors:q}=Ne({spec:t,data:e,customPalettes:g,colorScheme:p,plugins:s,resolveRenderer:k,anchorResolver:v,onSpecChange:l,onError:i,onWarnings:u});(0,d.useEffect)(()=>{if(S)return S.subscribe((j,H)=>{if(j.scene.spec===H.scene.spec)return;const{selection:x,setSelection:P}=h.getState();x.length!==0&&P(Q(x,j.scene.spec))})},[S,h]);const E=(0,d.useMemo)(()=>({dispatch:N,commit:C}),[N,C]);(0,d.useImperativeHandle)(o,()=>({commands:E,undo:b.undo,redo:b.redo,subscribe:_,getScene:w,getSelection:()=>h.getState().selection,setSelection:j=>h.getState().setSelection(j),subscribeSelection:h.subscribe}),[E,b,_,w,h]);const R=(0,d.useMemo)(()=>S?{chartId:G,store:S,selectionStore:h,commands:E,history:b,formattingLocale:r,compileBus:D,colorScheme:p,styleResolver:y,anchorResolver:v}:null,[G,S,h,E,b,r,D,p,y,v]);return(0,a.jsx)(z,{forcedErrors:q,onError:i,resetKeys:[t,e],children:R?(0,a.jsx)(c.GraphContext.Provider,{value:R,children:(0,a.jsx)(c.GeomRendererResolverProvider,{value:k,children:T})}):null})};function _e(e){const t=(0,m.createGraphyBuilder)(e);return{...t,GraphProvider:r=>(0,a.jsx)(J,{...r,plugins:t.plugins})}}var De=({children:e,...t})=>(0,a.jsx)("svg",{viewBox:"0 0 1 1",preserveAspectRatio:"none",width:"100%",height:"100%",pointerEvents:"none",...t,children:e}),Ie=({box:e,children:t})=>(0,a.jsx)("svg",{x:(0,m.toPercent)(e.x0),y:(0,m.toPercent)(e.y0),width:(0,m.toPercent)(e.x1-e.x0),height:(0,m.toPercent)(e.y1-e.y0),overflow:"hidden",pointerEvents:"none",children:t}),we="drqe3u0",He="drqe3u1",Me="drqe3u2",Pe="drqe3u3",I="drqe3u4",$e="drqe3u5",Le="drqe3u6",Be="drqe3u7",M="drqe3u8",Oe="drqe3u9",Ae="drqe3ua";var Ke="drqe3uc",Ue="drqe3ud",Ye="drqe3ue",Fe="drqe3uf";var Ve="drqe3uh",We="drqe3ui",V={enabled:"drqe3uk drqe3uj",disabled:"drqe3ul drqe3uj"},W={ran:"drqe3un drqe3um",dim:"drqe3uo drqe3um"},Z={ran:"drqe3uq drqe3up",cached:"drqe3ur drqe3up",untouched:"drqe3us drqe3up"},ze=({width:e=440,style:t,className:s}={})=>{const{compileBus:r}=c.useGraphContext(),[o]=(0,d.useState)(()=>fe()),[l,i]=(0,d.useState)(!1),[u,g]=(0,d.useState)(m.isCompilerCachingEnabled);(0,d.useEffect)(()=>{const{recordCompile:h}=o.getState(),y=r.getLastTrigger(),S=r.getLastCompile();return y&&S&&h(y,S),r.subscribe(h)},[o,r]);const p=(0,U.useStore)(o,h=>h.lastCompile),T=(0,U.useStore)(o,h=>h.history),k=r.getCacheStats(),G=p===null&&T.length===0,v=()=>{g(h=>{const y=!h;return(0,m.setCompilerCachingEnabled)(y),y})};return(0,a.jsxs)("div",{className:(0,$.default)(Ae,s),style:{width:e,...t},children:[(0,a.jsxs)("div",{className:we,children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:He,children:"compile cache"}),(0,a.jsx)("div",{className:Ye,children:G?"production: stats disabled":p?`last: ${p.label} · ${O(p.durationMs)}`:"awaiting first compile…"})]}),(0,a.jsx)("button",{type:"button",onClick:()=>i(h=>!h),className:Fe,children:l?"▾":"▴"})]}),!l&&(0,a.jsxs)("div",{className:"drqe3ub",children:[(0,a.jsxs)("button",{type:"button",onClick:v,className:u?V.enabled:V.disabled,"aria-pressed":u,children:["cache ",u?"enabled":"disabled"]}),(0,a.jsx)("span",{className:"drqe3ug",children:"next compile reflects this toggle"})]}),!l&&!G&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(Xe,{delta:p?.stages,durations:p?.stageDurationsMs,cumulative:k}),(0,a.jsx)(Qe,{entries:T})]})]})},Xe=({delta:e,durations:t,cumulative:s})=>(0,a.jsxs)("table",{className:Me,children:[(0,a.jsx)("thead",{children:(0,a.jsxs)("tr",{className:Ve,children:[(0,a.jsx)("th",{className:Pe,children:"stage"}),(0,a.jsx)("th",{className:I,children:"time"}),(0,a.jsx)("th",{className:I,children:"Δ miss"}),(0,a.jsx)("th",{className:I,children:"Δ hit"}),(0,a.jsx)("th",{className:I,children:"total miss"}),(0,a.jsx)("th",{className:I,children:"total hit"})]})}),(0,a.jsx)("tbody",{children:m.COMPILER_STAGE_KEYS.map(r=>{const o=e?.[r],l=Je(o);return(0,a.jsxs)("tr",{className:Ke,children:[(0,a.jsxs)("td",{className:$e,children:[(0,a.jsx)("span",{className:Z[l],"aria-hidden":!0})," ",r]}),(0,a.jsx)("td",{className:M,children:t===void 0||l==="untouched"?"—":O(t[r])}),(0,a.jsx)("td",{className:l==="ran"?W.ran:W.dim,children:o?.misses??0}),(0,a.jsx)("td",{className:M,children:o?.hits??0}),(0,a.jsx)("td",{className:M,children:s[r].misses}),(0,a.jsx)("td",{className:M,children:s[r].hits})]},r)})})]}),Qe=({entries:e})=>e.length===0?null:(0,a.jsxs)("div",{className:Ue,children:[(0,a.jsx)("div",{className:We,children:"recent compiles"}),e.map(t=>{const s=Ze(t.stages,l=>l.misses>0),r=m.COMPILER_STAGE_KEYS.length,o=s===0?"cached":"ran";return(0,a.jsxs)("div",{className:Le,children:[(0,a.jsx)("span",{className:Z[o],"aria-hidden":!0}),(0,a.jsx)("span",{className:Be,title:t.label,children:t.label}),(0,a.jsxs)("span",{className:Oe,children:[s,"/",r," ran · ",O(t.durationMs)]})]},t.id)})]}),Je=e=>!e||e.hits===0&&e.misses===0?"untouched":e.misses>0?"ran":"cached",Ze=(e,t)=>{let s=0;for(const r of m.COMPILER_STAGE_KEYS)t(e[r])&&(s+=1);return s},O=e=>e<.1?"<0.1ms":e>=10?`${e.toFixed(0)}ms`:`${e.toFixed(2)}ms`,et=()=>{const{history:e}=c.useGraphContext(),{stack:t,undo:s,redo:r}=e,o=(0,d.useCallback)(u=>t.subscribe(u),[t]),l=(0,d.useCallback)(()=>t.getSnapshot(),[t]),i=(0,d.useSyncExternalStore)(o,l,l);return(0,d.useMemo)(()=>({...i,undo:s,redo:r}),[i,s,r])},tt=new Set(["button","checkbox","color","file","hidden","image","radio","range","reset","submit"]),rt=(e,t={})=>{const{target:s,enabled:r=!0}=t;(0,d.useEffect)(()=>{const o=st(s);if(!r||!o)return;const l=i=>{if(!nt(i)||i.defaultPrevented||ot(i.target))return;const u=c.resolveHistoryStep(i);if(!u)return;const g=e.current;g&&(u==="undo"?g.undo():g.redo())&&i.preventDefault()};return o.addEventListener("keydown",l),()=>o.removeEventListener("keydown",l)},[e,s,r])},st=e=>e===void 0?window:e!==null&&"current"in e?e.current:e,nt=e=>"key"in e,ot=e=>e instanceof HTMLInputElement?!tt.has(e.type):e instanceof HTMLElement?e.isContentEditable||e.tagName==="TEXTAREA":!1;exports.BrandMark=c.BrandMark;exports.CanvasTextMeasurer=c.CanvasTextMeasurer;exports.DefaultFooter=c.DefaultFooter;exports.DefaultGrid=c.DefaultGrid;exports.DefaultHeader=c.DefaultHeader;exports.DefaultSwatch=c.DefaultSwatch;exports.DefaultTooltip=c.DefaultTooltip;exports.DevToolsPanel=ze;exports.GRAPH_MODES=c.GRAPH_MODES;exports.GraphErrorBoundary=z;exports.GraphErrorPanel=L;exports.GraphProvider=J;exports.GraphRenderer=c.GraphRenderer;exports.HoverProvider=c.HoverProvider;exports.TextMeasurerProvider=c.TextMeasurerProvider;exports.ThemeProvider=c.ThemeProvider;exports.UnitBoxSvg=Ie;exports.UnitSpaceSvg=De;exports.createGraphyKit=_e;exports.darkTheme=c.darkTheme;exports.defineGeomRenderer=c.defineGeomRenderer;exports.lightTheme=c.lightTheme;exports.lightenCss=c.lightenCss;exports.pruneSelection=Q;exports.resolveBrandMarkVisual=c.resolveBrandMarkVisual;exports.stampAxisEditTarget=c.stampAxisEditTarget;exports.stampGridEditTarget=c.stampGridEditTarget;exports.stampLegendEditTarget=c.stampLegendEditTarget;exports.useElementScreenRect=c.useElementScreenRect;exports.useGeomHitTest=c.useGeomHitTest;exports.useGeomHover=c.useGeomHover;exports.useGraphCommands=c.useGraphCommands;exports.useGraphHandle=c.useGraphHandle;exports.useGraphHistory=et;exports.useGraphHistoryShortcuts=rt;exports.useGraphSelection=c.useGraphSelection;exports.useGuidesTakePress=c.useGuidesTakePress;exports.useHandleScene=c.useHandleScene;exports.useHoverState=c.useHoverState;exports.useSceneSelector=c.useSceneSelector;exports.useStyleReaderTree=c.useStyleReaderTree;exports.useStyleReaders=c.useStyleReaders;exports.useStyleResolver=c.useStyleResolver;exports.useTextMeasurer=c.useTextMeasurer;exports.vars=se.vars;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('./index.css');const c=require("./history-chords-DEf-PLZQ.cjs"),se=require("./theme.contract.css-VQwFtkVc.cjs");let m=require("@graphysdk/viz-engine"),d=require("react"),a=require("react/jsx-runtime"),U=require("zustand"),B=require("zustand/vanilla"),$=require("clsx");$=c.__toESM($,1);var ne="_1a5iqpb0",oe="_1a5iqpb1";var ae="_1a5iqpb3",ie="_1a5iqpb4",ce="_1a5iqpb5";var L=({errors:e})=>{const[t,...s]=e;return(0,a.jsxs)("div",{role:"alert",className:ne,children:[(0,a.jsx)("strong",{className:oe,children:"This chart could not be rendered."}),t&&(0,a.jsx)(Y,{diagnostic:t}),s.length>0&&(0,a.jsx)("ul",{className:"_1a5iqpb2",children:s.map((r,o)=>(0,a.jsx)("li",{children:(0,a.jsx)(Y,{diagnostic:r})},`${r.code}-${o}`))})]})},Y=({diagnostic:e})=>(0,a.jsxs)("div",{className:ae,children:[(0,a.jsx)("span",{className:ie,children:e.code}),(0,a.jsx)("p",{className:ce,children:e.message}),e.suggestion&&(0,a.jsx)("p",{className:"_1a5iqpb6",children:e.suggestion})]});function le(e=[],t=[]){return e.length===t.length&&e.every((s,r)=>Object.is(s,t[r]))}var z=class extends d.Component{constructor(...e){super(...e),this.state={caughtDiagnostic:null}}static getDerivedStateFromError(e){return{caughtDiagnostic:(0,m.buildDiagnostic)(e)}}componentDidCatch(e,t){const s=(0,m.buildDiagnostic)(e);c.logDiagnostics([s]),this.props.onError?.([s]),console.error("Chart render component stack:",t.componentStack)}componentDidUpdate(e){this.state.caughtDiagnostic&&!le(e.resetKeys,this.props.resetKeys)&&this.setState({caughtDiagnostic:null})}render(){const{caughtDiagnostic:e}=this.state;if(e)return(0,a.jsx)(L,{errors:[e]});const{forcedErrors:t,children:s}=this.props;return t&&t.length>0?(0,a.jsx)(L,{errors:t}):s}},X=e=>typeof e=="object"&&"geom"in e&&"render"in e,de=e=>{const t=(0,m.resolveDefinition)(e);return t instanceof m.Geom?t:null},Q=(e,t)=>{const s=e.filter(r=>ue(r,t));return s.length===e.length?e:s},ue=(e,t)=>e.kind==="annotation"?(0,m.findAnnotation)(t.annotations,e.id)!==null:e.kind==="observations"||e.kind==="layer"&&e.layerId!==void 0?(0,m.findLayerById)(t.layers,e.layerId)!==void 0:!0,F=[],he=()=>(0,B.createStore)(e=>({selection:F,setSelection:t=>e(s=>ge(s.selection,t)?s:{selection:t}),clearSelection:()=>e(t=>t.selection.length===0?t:{selection:F})})),ge=(e,t)=>e===t?!0:e.length!==t.length?!1:e.every((s,r)=>{const o=t[r];return o!==void 0&&(0,m.areEditTargetsEqual)(s,o)}),me=process.env.NODE_ENV!=="production",pe=5,ve=e=>{if(!me)return{emit:()=>{},subscribe:()=>ye,getLastTrigger:()=>null,getLastCompile:()=>null,getCacheStats:()=>e.getCacheStats()};const t=new Set;let s=null;return{emit:r=>{const o=e.getLastCompile();if(o){s=r;for(const l of t)l(r,o)}},subscribe:r=>(t.add(r),()=>{t.delete(r)}),getLastTrigger:()=>s,getLastCompile:()=>e.getLastCompile(),getCacheStats:()=>e.getCacheStats()}},fe=()=>(0,B.createStore)(e=>({lastCompile:null,history:[],nextId:1,lastSnapshot:null,recordCompile:(t,s)=>e(r=>{if(r.lastSnapshot===s)return r;const o={id:r.nextId,label:Se(t),stages:s.stages,stageDurationsMs:s.stageDurationsMs,durationMs:s.durationMs};return{lastCompile:o,history:be(r.history,o,pe),nextId:r.nextId+1,lastSnapshot:s}})})),ye=()=>{},Se=e=>{switch(e.kind){case"init":return"init";case"spec":return"spec change";case"data":return"data change";case"command":return e.command.metadata.description}},be=(e,t,s)=>{const r=e.length>=s?e.length-(s-1):0;return[...e.slice(r),t]};function Ee(e){const t=e.filter(X),s=new Set([...Object.keys(c.BUILT_IN_GEOM_RENDERERS),...t.map(u=>u.geom)]),r=[],o=new Set;for(const u of e){const g=de(u);g===null||s.has(g.type)||o.has(g.type)||(o.add(g.type),r.push({kind:"user-input",severity:"error",code:"MISSING_GEOM_RENDERER",message:`Custom geom '${g.type}' is registered but has no renderer.`,context:{requested:g.type,kind:"geom-renderer"},suggestion:`Add a render half for it: \`defineGeomRenderer(${g.type}Geom, { coord, render })\`, then include it in \`plugins\`.`}))}const l=new Map;for(const u of t){if("definition"in u)continue;const g=`${u.geom}|${u.coord}`,p=l.get(g);p?p.count+=1:l.set(g,{geom:u.geom,coord:u.coord,count:1})}const i=[];for(const{geom:u,coord:g,count:p}of l.values())p<2||i.push({kind:"user-input",severity:"warning",code:"DUPLICATE_REGISTERED_TYPE",message:`Multiple render-only overrides register ('${u}', '${g}') (${p} entries); the last in the array wins.`,context:{requested:`${u}@${g}`,kind:"geom-renderer"},suggestion:`Keep a single render-only override for ('${u}', '${g}').`});return{errors:r,warnings:i}}function xe(e,t){const{coordSystem:s,layers:r}=e,o=new Set,l=[];for(const i of r)t(i.geom,s.type)!==null||o.has(i.geom)||(o.add(i.geom),l.push({kind:"user-input",severity:"warning",code:"MISSING_GEOM_RENDERER",message:`No renderer for geom '${i.geom}' under ${s.type} coords; the layer is not painted.`,context:{requested:i.geom,kind:"geom-renderer"},suggestion:`Register a renderer for ('${i.geom}', '${s.type}') via \`defineGeomRenderer\`.`}));return l}function Te(e,t){const{coordSystem:s,layers:r}=e,o=new Set,l=[];for(const i of r){if(i.interactive===!1||i.spatialKind!=="render-hit-test"||o.has(i.geom))continue;const u=t(i.geom,s.type);u===null||u.hitTest||c.isOverlayHosted(u)||(o.add(i.geom),l.push({kind:"user-input",severity:"warning",code:"MISSING_RENDER_HIT_TEST",message:`Geom '${i.geom}' declares spatialKind 'render-hit-test' but its renderer provides no hit-test; the layer has no hover.`,context:{requested:i.geom,kind:"geom-renderer"},suggestion:`Add a \`hitTest\` factory (precomputed geometry) or an overlay render (\`{ fn, options: { overlay: true } }\`, live simulation) to the renderer for ('${i.geom}', '${s.type}').`}))}return l}function Ce(e){const t=new Set,s=[];for(const r of e.layers){const o=r.identityKey;r.interactive!==!1&&(r.spatialKind!=="render-hit-test"||typeof o!="object"||t.has(r.geom)||r.data.hasVariable(o.variable)||(t.add(r.geom),s.push({kind:"user-input",severity:"warning",code:"RENDER_HIT_TEST_IDENTITY",message:`Geom '${r.geom}' keys its identity on '${o.variable}', a column its compile output does not emit; its hover lookup is empty.`,context:{requested:r.geom,kind:"geom-renderer"},suggestion:`Emit the '${o.variable}' column from the geom's \`compile()\`, or point \`identityKey\` at a column it does emit.`})))}return s}function Re(e,t){const{coordSystem:s,layers:r}=e,o=new Set,l=[];for(const i of r){if(i.interactive===!1||i.spatialKind!=="render-hit-test"||o.has(i.geom))continue;const u=t(i.geom,s.type);u===null||!u.hitTest||!c.isOverlayHosted(u)||(o.add(i.geom),l.push({kind:"user-input",severity:"warning",code:"CONFLICTING_RENDER_HIT_TEST",message:`Geom '${i.geom}' declares both a \`hitTest\` factory and an overlay render; these are alternatives, so only the overlay is used.`,context:{requested:i.geom,kind:"geom-renderer"},suggestion:"Keep one: a `hitTest` factory for precomputed geometry, OR an overlay render (`{ fn, options: { overlay: true } }`) for a live simulation."}))}return l}function Ge(e,t){const s=new Set,r=[];for(const o of e.layers)o.interactive!==!1&&(o.spatialKind!=="render-hit-test"||s.has(o.geom)||t.hasCapability(o.geom)||(s.add(o.geom),r.push({kind:"user-input",severity:"warning",code:"MISSING_ANCHOR_CAPABILITY",message:`Geom '${o.geom}' declares no \`resolveAnchorPosition\`; its observations cannot be annotated, so the editor overlay paints no creation trigger on them.`,context:{requested:o.geom,kind:"geom-renderer"},suggestion:"Implement `resolveAnchorPosition(observation, context)` on the geom, returning the normalised panel position an annotation on that observation belongs at."})));return r}function qe(e,t){const{coordSystem:s,layers:r}=e,o=new Set,l=[];for(const i of r){if(i.interactive===!1||i.spatialKind==="render-hit-test"||o.has(i.geom))continue;const u=t(i.geom,s.type);u===null||!c.isOverlayHosted(u)||(o.add(i.geom),l.push({kind:"user-input",severity:"warning",code:"OVERLAY_REQUIRES_RENDER_HIT_TEST",message:`Geom '${i.geom}' declares an overlay render but its layer's spatialKind is '${i.spatialKind}', not 'render-hit-test'; the overlay's push-path hover resolves to nothing.`,context:{requested:i.geom,kind:"geom-renderer"},suggestion:"Have the geom's manifest yield spatialKind 'render-hit-test' so the scene layer carries the `byKey` index the overlay's `pushHover` resolves against."}))}return l}var ke=e=>(0,B.createStore)(t=>({scene:e,setScene:s=>t(r=>r.scene===s?r:{scene:s})})),Ne=({spec:e,data:t,customPalettes:s,colorScheme:r,plugins:o,resolveRenderer:l,anchorResolver:i,onSpecChange:u,onError:g,onWarnings:p})=>{const T=c.useLatestRef(u),k=c.useLatestRef(g),G=c.useLatestRef(p),[{session:v,compileBus:h}]=(0,d.useState)(()=>{const n=(0,m.createCompiler)({plugins:o});return{session:new m.GraphCompilationSession(n),compileBus:ve(n)}}),[y]=(0,d.useState)(()=>Ee(o??[])),S=(0,d.useRef)(null),[N]=(0,d.useState)(je),C=(0,d.useRef)(null),b=(0,d.useCallback)(n=>y.errors.length===0?n:[...y.errors,...n??[]],[y]),_=(0,d.useCallback)(n=>{if(!n.ok)return n.errors;if(C.current)C.current.getState().setScene(n.scene);else{const f=ke(n.scene);f.subscribe(N.notify),C.current=f,N.notify()}return null},[N]),[w,D]=(0,d.useState)(()=>{const n=v.compile({spec:e,data:t,customPalettes:s,colorScheme:r});return S.current=n,b(_(n))}),q=(0,d.useCallback)(n=>n.ok?[...n.warnings,...xe(n.scene,l),...Te(n.scene,l),...Ce(n.scene),...Re(n.scene,l),...qe(n.scene,l),...Ge(n.scene,i)]:n.warnings,[l,i]),E=(0,d.useCallback)(n=>{n.length!==0&&(c.logDiagnostics(n),k.current?.(n))},[k]),R=(0,d.useCallback)(n=>{n.length!==0&&(c.logDiagnostics(n),G.current?.(n))},[G]);(0,d.useEffect)(()=>{const n=S.current;n&&(E([...y.errors,...n.ok?[]:n.errors]),R([...y.warnings,...q(n)]),n.ok&&h.emit({kind:"init"}))},[h,E,R,y,q]),(0,d.useEffect)(()=>{const n=v.update({spec:e,data:t,customPalettes:s,colorScheme:r});if(!n)return;n.committedSpec&&T.current?.(n.committedSpec);const f=_(n.result);D(b(f)),f&&E(f),R(q(n.result)),f||h.emit({kind:n.specChanged?"spec":"data"})},[e,t,s,r,v,h,_,E,R,b,q,T]);const j=(0,d.useCallback)(n=>{D(f=>f===null?f:b(null)),R(q(n))},[b,R,q]),H=(0,d.useCallback)(n=>{n.scene&&C.current?.getState().setScene(n.scene),n.result&&j(n.result),n.command&&h.emit({kind:"command",command:n.command}),n.spec&&T.current?.(n.spec),n.errors&&E([...n.errors])},[j,h,T,E]),x=(0,d.useCallback)(n=>{for(const f of n)H(f);return n.some(f=>!!f.scene)},[H]),P=(0,d.useCallback)((n,f)=>{x(v.applyCommand(n,f))},[v,x]),ee=(0,d.useCallback)(()=>{x(v.commit())},[v,x]),A=(0,d.useCallback)(()=>x(v.undo()),[v,x]),K=(0,d.useCallback)(()=>x(v.redo()),[v,x]),te=(0,d.useMemo)(()=>({stack:v.history,undo:A,redo:K}),[v,A,K]),re=(0,d.useCallback)(()=>C.current?.getState().scene??null,[]);return{store:C.current,dispatch:P,commit:ee,history:te,subscribe:N.subscribe,getScene:re,compileBus:h,compileErrors:w}},je=()=>{const e=new Set;return{subscribe:t=>(e.add(t),()=>{e.delete(t)}),notify:()=>e.forEach(t=>t())}},J=({data:e,spec:t,plugins:s=[],formattingLocale:r,handleRef:o,onSpecChange:l,onError:i,onWarnings:u,customPalettes:g,colorScheme:p="light",children:T})=>{const[k]=(0,d.useState)(()=>c.createGeomRendererResolver(s.filter(X))),G=(0,d.useId)(),[v]=(0,d.useState)(()=>(0,m.createAnchorResolver)(s)),[h]=(0,d.useState)(()=>he()),y=(0,d.useMemo)(()=>(0,m.createStyleResolver)({colorScheme:p}),[p]),{store:S,dispatch:N,commit:C,history:b,subscribe:_,getScene:w,compileBus:D,compileErrors:q}=Ne({spec:t,data:e,customPalettes:g,colorScheme:p,plugins:s,resolveRenderer:k,anchorResolver:v,onSpecChange:l,onError:i,onWarnings:u});(0,d.useEffect)(()=>{if(S)return S.subscribe((j,H)=>{if(j.scene.spec===H.scene.spec)return;const{selection:x,setSelection:P}=h.getState();x.length!==0&&P(Q(x,j.scene.spec))})},[S,h]);const E=(0,d.useMemo)(()=>({dispatch:N,commit:C}),[N,C]);(0,d.useImperativeHandle)(o,()=>({commands:E,undo:b.undo,redo:b.redo,subscribe:_,getScene:w,getSelection:()=>h.getState().selection,setSelection:j=>h.getState().setSelection(j),subscribeSelection:h.subscribe}),[E,b,_,w,h]);const R=(0,d.useMemo)(()=>S?{chartId:G,store:S,selectionStore:h,commands:E,history:b,formattingLocale:r,compileBus:D,colorScheme:p,styleResolver:y,anchorResolver:v}:null,[G,S,h,E,b,r,D,p,y,v]);return(0,a.jsx)(z,{forcedErrors:q,onError:i,resetKeys:[t,e],children:R?(0,a.jsx)(c.GraphContext.Provider,{value:R,children:(0,a.jsx)(c.GeomRendererResolverProvider,{value:k,children:T})}):null})};function _e(e){const t=(0,m.createSpecBuilder)(e);return{...t,GraphProvider:r=>(0,a.jsx)(J,{...r,plugins:t.plugins})}}var De=({children:e,...t})=>(0,a.jsx)("svg",{viewBox:"0 0 1 1",preserveAspectRatio:"none",width:"100%",height:"100%",pointerEvents:"none",...t,children:e}),Ie=({box:e,children:t})=>(0,a.jsx)("svg",{x:(0,m.toPercent)(e.x0),y:(0,m.toPercent)(e.y0),width:(0,m.toPercent)(e.x1-e.x0),height:(0,m.toPercent)(e.y1-e.y0),overflow:"hidden",pointerEvents:"none",children:t}),we="drqe3u0",He="drqe3u1",Me="drqe3u2",Pe="drqe3u3",I="drqe3u4",$e="drqe3u5",Le="drqe3u6",Be="drqe3u7",M="drqe3u8",Oe="drqe3u9",Ae="drqe3ua";var Ke="drqe3uc",Ue="drqe3ud",Ye="drqe3ue",Fe="drqe3uf";var Ve="drqe3uh",We="drqe3ui",V={enabled:"drqe3uk drqe3uj",disabled:"drqe3ul drqe3uj"},W={ran:"drqe3un drqe3um",dim:"drqe3uo drqe3um"},Z={ran:"drqe3uq drqe3up",cached:"drqe3ur drqe3up",untouched:"drqe3us drqe3up"},ze=({width:e=440,style:t,className:s}={})=>{const{compileBus:r}=c.useGraphContext(),[o]=(0,d.useState)(()=>fe()),[l,i]=(0,d.useState)(!1),[u,g]=(0,d.useState)(m.isCompilerCachingEnabled);(0,d.useEffect)(()=>{const{recordCompile:h}=o.getState(),y=r.getLastTrigger(),S=r.getLastCompile();return y&&S&&h(y,S),r.subscribe(h)},[o,r]);const p=(0,U.useStore)(o,h=>h.lastCompile),T=(0,U.useStore)(o,h=>h.history),k=r.getCacheStats(),G=p===null&&T.length===0,v=()=>{g(h=>{const y=!h;return(0,m.setCompilerCachingEnabled)(y),y})};return(0,a.jsxs)("div",{className:(0,$.default)(Ae,s),style:{width:e,...t},children:[(0,a.jsxs)("div",{className:we,children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:He,children:"compile cache"}),(0,a.jsx)("div",{className:Ye,children:G?"production: stats disabled":p?`last: ${p.label} · ${O(p.durationMs)}`:"awaiting first compile…"})]}),(0,a.jsx)("button",{type:"button",onClick:()=>i(h=>!h),className:Fe,children:l?"▾":"▴"})]}),!l&&(0,a.jsxs)("div",{className:"drqe3ub",children:[(0,a.jsxs)("button",{type:"button",onClick:v,className:u?V.enabled:V.disabled,"aria-pressed":u,children:["cache ",u?"enabled":"disabled"]}),(0,a.jsx)("span",{className:"drqe3ug",children:"next compile reflects this toggle"})]}),!l&&!G&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(Xe,{delta:p?.stages,durations:p?.stageDurationsMs,cumulative:k}),(0,a.jsx)(Qe,{entries:T})]})]})},Xe=({delta:e,durations:t,cumulative:s})=>(0,a.jsxs)("table",{className:Me,children:[(0,a.jsx)("thead",{children:(0,a.jsxs)("tr",{className:Ve,children:[(0,a.jsx)("th",{className:Pe,children:"stage"}),(0,a.jsx)("th",{className:I,children:"time"}),(0,a.jsx)("th",{className:I,children:"Δ miss"}),(0,a.jsx)("th",{className:I,children:"Δ hit"}),(0,a.jsx)("th",{className:I,children:"total miss"}),(0,a.jsx)("th",{className:I,children:"total hit"})]})}),(0,a.jsx)("tbody",{children:m.COMPILER_STAGE_KEYS.map(r=>{const o=e?.[r],l=Je(o);return(0,a.jsxs)("tr",{className:Ke,children:[(0,a.jsxs)("td",{className:$e,children:[(0,a.jsx)("span",{className:Z[l],"aria-hidden":!0})," ",r]}),(0,a.jsx)("td",{className:M,children:t===void 0||l==="untouched"?"—":O(t[r])}),(0,a.jsx)("td",{className:l==="ran"?W.ran:W.dim,children:o?.misses??0}),(0,a.jsx)("td",{className:M,children:o?.hits??0}),(0,a.jsx)("td",{className:M,children:s[r].misses}),(0,a.jsx)("td",{className:M,children:s[r].hits})]},r)})})]}),Qe=({entries:e})=>e.length===0?null:(0,a.jsxs)("div",{className:Ue,children:[(0,a.jsx)("div",{className:We,children:"recent compiles"}),e.map(t=>{const s=Ze(t.stages,l=>l.misses>0),r=m.COMPILER_STAGE_KEYS.length,o=s===0?"cached":"ran";return(0,a.jsxs)("div",{className:Le,children:[(0,a.jsx)("span",{className:Z[o],"aria-hidden":!0}),(0,a.jsx)("span",{className:Be,title:t.label,children:t.label}),(0,a.jsxs)("span",{className:Oe,children:[s,"/",r," ran · ",O(t.durationMs)]})]},t.id)})]}),Je=e=>!e||e.hits===0&&e.misses===0?"untouched":e.misses>0?"ran":"cached",Ze=(e,t)=>{let s=0;for(const r of m.COMPILER_STAGE_KEYS)t(e[r])&&(s+=1);return s},O=e=>e<.1?"<0.1ms":e>=10?`${e.toFixed(0)}ms`:`${e.toFixed(2)}ms`,et=()=>{const{history:e}=c.useGraphContext(),{stack:t,undo:s,redo:r}=e,o=(0,d.useCallback)(u=>t.subscribe(u),[t]),l=(0,d.useCallback)(()=>t.getSnapshot(),[t]),i=(0,d.useSyncExternalStore)(o,l,l);return(0,d.useMemo)(()=>({...i,undo:s,redo:r}),[i,s,r])},tt=new Set(["button","checkbox","color","file","hidden","image","radio","range","reset","submit"]),rt=(e,t={})=>{const{target:s,enabled:r=!0}=t;(0,d.useEffect)(()=>{const o=st(s);if(!r||!o)return;const l=i=>{if(!nt(i)||i.defaultPrevented||ot(i.target))return;const u=c.resolveHistoryStep(i);if(!u)return;const g=e.current;g&&(u==="undo"?g.undo():g.redo())&&i.preventDefault()};return o.addEventListener("keydown",l),()=>o.removeEventListener("keydown",l)},[e,s,r])},st=e=>e===void 0?window:e!==null&&"current"in e?e.current:e,nt=e=>"key"in e,ot=e=>e instanceof HTMLInputElement?!tt.has(e.type):e instanceof HTMLElement?e.isContentEditable||e.tagName==="TEXTAREA":!1;exports.BrandMark=c.BrandMark;exports.CanvasTextMeasurer=c.CanvasTextMeasurer;exports.DefaultFooter=c.DefaultFooter;exports.DefaultGrid=c.DefaultGrid;exports.DefaultHeader=c.DefaultHeader;exports.DefaultSwatch=c.DefaultSwatch;exports.DefaultTooltip=c.DefaultTooltip;exports.DevToolsPanel=ze;exports.GRAPH_MODES=c.GRAPH_MODES;exports.GraphErrorBoundary=z;exports.GraphErrorPanel=L;exports.GraphProvider=J;exports.GraphRenderer=c.GraphRenderer;exports.HoverProvider=c.HoverProvider;exports.TextMeasurerProvider=c.TextMeasurerProvider;exports.ThemeProvider=c.ThemeProvider;exports.UnitBoxSvg=Ie;exports.UnitSpaceSvg=De;exports.createGraphyKit=_e;exports.darkTheme=c.darkTheme;exports.defineGeomRenderer=c.defineGeomRenderer;exports.lightTheme=c.lightTheme;exports.lightenCss=c.lightenCss;exports.pruneSelection=Q;exports.resolveBrandMarkVisual=c.resolveBrandMarkVisual;exports.stampAxisEditTarget=c.stampAxisEditTarget;exports.stampGridEditTarget=c.stampGridEditTarget;exports.stampLegendEditTarget=c.stampLegendEditTarget;exports.useElementScreenRect=c.useElementScreenRect;exports.useGeomHitTest=c.useGeomHitTest;exports.useGeomHover=c.useGeomHover;exports.useGraphCommands=c.useGraphCommands;exports.useGraphHandle=c.useGraphHandle;exports.useGraphHistory=et;exports.useGraphHistoryShortcuts=rt;exports.useGraphSelection=c.useGraphSelection;exports.useGuidesTakePress=c.useGuidesTakePress;exports.useHandleScene=c.useHandleScene;exports.useHoverState=c.useHoverState;exports.useSceneSelector=c.useSceneSelector;exports.useStyleReaderTree=c.useStyleReaderTree;exports.useStyleReaders=c.useStyleReaders;exports.useStyleResolver=c.useStyleResolver;exports.useTextMeasurer=c.useTextMeasurer;exports.vars=se.vars;
package/dist/index.d.ts CHANGED
@@ -7,11 +7,12 @@ import { CommandStackSnapshot } from '@graphysdk/viz-engine';
7
7
  import { Component } from 'react';
8
8
  import { ComponentType } from 'react';
9
9
  import { CoordSystem } from '@graphysdk/viz-engine';
10
- import { CreateGraphyBuilderOptions } from '@graphysdk/viz-engine';
10
+ import { CreateSpecBuilderOptions } from '@graphysdk/viz-engine';
11
11
  import { CSSProperties } from 'react';
12
12
  import { CustomPalettes } from '@graphysdk/viz-engine';
13
13
  import { Data } from '@graphysdk/viz-engine';
14
14
  import { DispatchOptions } from '@graphysdk/viz-engine';
15
+ import { Edge } from '@graphysdk/viz-engine';
15
16
  import { EdgeSizes } from '@graphysdk/viz-engine';
16
17
  import { EditTarget } from '@graphysdk/viz-engine';
17
18
  import { ErrorInfo } from 'react';
@@ -23,15 +24,13 @@ import { Geom } from '@graphysdk/viz-engine';
23
24
  import { GeomName } from '@graphysdk/viz-engine';
24
25
  import { GeomStyleReaders } from '@graphysdk/viz-engine';
25
26
  import { GraphLayout } from '@graphysdk/viz-engine';
26
- import { GraphyBuilder } from '@graphysdk/viz-engine';
27
27
  import { HeadlineMeasurer } from '@graphysdk/viz-engine';
28
28
  import { HoverHit } from '@graphysdk/viz-engine';
29
29
  import { HoverState } from '@graphysdk/viz-engine';
30
30
  import { IntroStaggerOrder } from '@graphysdk/viz-engine';
31
31
  import { JSX } from 'react/jsx-runtime';
32
32
  import { LayerIntroPlan } from '@graphysdk/viz-engine';
33
- import { LayoutEdge } from '@graphysdk/viz-engine';
34
- import { LineStyleType } from '@graphysdk/viz-engine';
33
+ import { LineType } from '@graphysdk/viz-engine';
35
34
  import { Locale } from '@graphysdk/viz-engine';
36
35
  import { MeasuredText } from '@graphysdk/viz-engine';
37
36
  import { Observation } from '@graphysdk/viz-engine';
@@ -45,15 +44,15 @@ import { Ref } from 'react';
45
44
  import { RefObject } from 'react';
46
45
  import { RenderHitTester } from '@graphysdk/viz-engine';
47
46
  import { ResolvedHeadlineSize } from '@graphysdk/viz-engine';
48
- import { ResolvedSourceStyle } from '@graphysdk/viz-engine';
49
47
  import { ResolvedSpec } from '@graphysdk/viz-engine';
50
- import { ResolvedTextStyle } from '@graphysdk/viz-engine';
51
48
  import { ScaledPositionAestheticKey } from '@graphysdk/viz-engine';
52
49
  import { Scene } from '@graphysdk/viz-engine';
53
50
  import { SceneLayer } from '@graphysdk/viz-engine';
54
51
  import { SceneLayerFor } from '@graphysdk/viz-engine';
55
52
  import { SourceContent } from '@graphysdk/viz-engine';
53
+ import { SourceStyle } from '@graphysdk/viz-engine';
56
54
  import { Spec } from '@graphysdk/viz-engine';
55
+ import { SpecBuilder } from '@graphysdk/viz-engine';
57
56
  import { StoreApi } from 'zustand';
58
57
  import { StyleReadersForLayer } from '@graphysdk/viz-engine';
59
58
  import { StyleReaderTree } from '@graphysdk/viz-engine';
@@ -61,8 +60,10 @@ import { StyleResolver } from '@graphysdk/viz-engine';
61
60
  import { SVGProps } from 'react';
62
61
  import { TextContent } from '@graphysdk/viz-engine';
63
62
  import { TextMeasurer } from '@graphysdk/viz-engine';
63
+ import { TextStyle } from '@graphysdk/viz-engine';
64
64
  import { TooltipContent } from '@graphysdk/viz-engine';
65
65
  import { VizDiagnostic } from '@graphysdk/viz-engine';
66
+ import { XYPoint } from '@graphysdk/viz-engine';
66
67
 
67
68
  /** The axis identity and optional tick address spread onto a label's containing group. */
68
69
  export declare type AxisEditTargetAttributes = {
@@ -81,7 +82,7 @@ export declare type AxisEditTargetAttributes = {
81
82
  */
82
83
  export declare interface AxisLabelSlotProps {
83
84
  formattedAxes: FormattedAxis[];
84
- labelRects: Partial<Record<LayoutEdge, Rect>>;
85
+ labelRects: Partial<Record<Edge, Rect>>;
85
86
  }
86
87
 
87
88
  /**
@@ -91,7 +92,7 @@ export declare interface AxisLabelSlotProps {
91
92
  */
92
93
  export declare interface AxisTicksSlotProps {
93
94
  formattedAxes: FormattedAxis[];
94
- tickRects: Partial<Record<LayoutEdge, Rect>>;
95
+ tickRects: Partial<Record<Edge, Rect>>;
95
96
  }
96
97
 
97
98
  /** Made with Graphy provenance badge — capsule + glyph + system-face copy. */
@@ -172,11 +173,11 @@ declare type CoordSystemFor<C extends CoordKind> = C extends 'cartesian' ? Carte
172
173
  /**
173
174
  * Ergonomic entry point for a React app: pass `plugins` once and get back a {@link GraphyKit} — the
174
175
  * typed builder plus a `GraphProvider` that already carries them. Pure sugar over the primitives
175
- * (`createGraphyBuilder`, `<GraphProvider plugins>`); use those directly for headless or advanced
176
+ * (`createSpecBuilder`, `<GraphProvider plugins>`); use those directly for headless or advanced
176
177
  * wiring. The `const` type parameter captures the `plugins` tuple literally, so `kit.geom.<customName>`
177
178
  * is typed.
178
179
  */
179
- export declare function createGraphyKit<const P extends readonly Plugin_2[] = []>(options?: CreateGraphyBuilderOptions<P>): GraphyKit<P>;
180
+ export declare function createGraphyKit<const P extends readonly Plugin_2[] = []>(options?: CreateSpecBuilderOptions<P>): GraphyKit<P>;
180
181
 
181
182
  /**
182
183
  * Per-chart Zustand store for what is selected. Nothing in the geom paint path reads it, so a
@@ -209,7 +210,7 @@ export declare const DefaultHeader: ({ ref, headerRect, mode, title, isTitleVisi
209
210
  export declare const DefaultSwatch: ({ shape, color, lineType, width, height, strokeWidth, alpha, cornerRadius, }: Omit<SwatchSlotProps, "surface" | "label">) => JSX.Element;
210
211
 
211
212
  /**
212
- * Default tooltip body. Paints the box, header, and rows from the formatted {@link content}, and
213
+ * Default tooltip body. Paints the box, heading, and rows from the formatted {@link content}, and
213
214
  * resolves each row's swatch shape off its geom's render contract for the active coord system.
214
215
  * Positioning lives in the {@link Tooltip} wrapper, never here.
215
216
  */
@@ -269,6 +270,52 @@ export declare interface EditorSurfaceSlotProps {
269
270
  panelRect: Rect;
270
271
  /** The axes as the chart paints them, whose ticks a stamped tick index addresses. */
271
272
  formattedAxes: readonly FormattedAxis[];
273
+ /** Whether the chart animates between states, so what the editor draws over its geoms can follow. */
274
+ shouldAnimateTransitions: boolean;
275
+ }
276
+
277
+ /** Round marks of one size, which the outline grows from their rim. */
278
+ export declare interface EditOutlineDots {
279
+ kind: 'dots';
280
+ /** Each dot's centre, in panel pixels. */
281
+ centers: readonly XYPoint[];
282
+ /** The diameter every dot covers, its border included, in pixels. */
283
+ size: number;
284
+ }
285
+
286
+ /** A filled region, which the outline grows from its edge. */
287
+ export declare interface EditOutlineRegion extends MorphingEditOutlineShape {
288
+ kind: 'region';
289
+ /** `'evenodd'` punches a subpath inside another out of it, as a ring's hole. */
290
+ fillRule?: 'nonzero' | 'evenodd';
291
+ }
292
+
293
+ /** One shape point and edit outlines. It carries no paint: the editor draws the outline round it in its own look. */
294
+ export declare type EditOutlineShape = EditOutlineRegion | EditOutlineStroke | EditOutlineDots;
295
+
296
+ /**
297
+ * The input a geom's {@link GeomRenderContract.getEditOutlineShapes} receives: the observations to outline as a
298
+ * layer, and what their shapes are placed and sized by.
299
+ */
300
+ declare interface EditOutlineShapesInput<G extends GeomName | string = string, C extends CoordKind = CoordKind> {
301
+ /** The outlined observations. */
302
+ layer: SceneLayerOf<G>;
303
+ /** The full layer `layer` was taken from — for context the subset can't see, like a stack's silhouette. */
304
+ sourceLayer: SceneLayerOf<G>;
305
+ coordSystem: CoordSystemFor<C>;
306
+ /** The panel's pixel rect. Shapes are placed in its local `0…width` / `0…height`. */
307
+ panelRect: GraphLayout['panel'];
308
+ /** Cascade readers for this layer, for the sizes a shape matches: a line's width, a point's size. */
309
+ styleReaders: StyleReadersOf<G>;
310
+ /** Whether the chart animates transitions, for a shape to copy where the geom's paint springs. */
311
+ shouldAnimateTransitions: boolean;
312
+ }
313
+
314
+ /** A stroke, which the outline grows from either side of its thickness. */
315
+ export declare interface EditOutlineStroke extends MorphingEditOutlineShape {
316
+ kind: 'stroke';
317
+ /** The thickness the stroke is drawn at, in pixels. */
318
+ width: number;
272
319
  }
273
320
 
274
321
  /**
@@ -285,8 +332,8 @@ export declare interface FooterSlotProps {
285
332
  isCaptionVisible: boolean;
286
333
  source: SourceContent | null;
287
334
  isSourceVisible: boolean;
288
- captionStyle: ResolvedTextStyle;
289
- sourceStyle: ResolvedSourceStyle;
335
+ captionStyle: TextStyle;
336
+ sourceStyle: SourceStyle;
290
337
  /**
291
338
  * Resolved badge visual for footer placement. `hidden` when the mark is off, below the min
292
339
  * footprint, or configured for header placement.
@@ -294,6 +341,9 @@ export declare interface FooterSlotProps {
294
341
  brandMark: BrandMarkVisual;
295
342
  }
296
343
 
344
+ /** A custom geom `getEditOutlineShapes` handler's input: the observations to outline as a layer, plus `sourceLayer`. */
345
+ export declare type GeomEditOutlineShapesRendererInput = EditOutlineShapesInput;
346
+
297
347
  /** A custom geom `renderHoverCompanions` handler's input: the layer plus the primary and related hover hits. */
298
348
  export declare type GeomHoverCompanionsRendererInput = HoverCompanionsRenderInput;
299
349
 
@@ -332,18 +382,6 @@ export declare interface GeomOverlayRenderInput<G extends GeomName | string = st
332
382
  overlay: InteractiveOverlayApi;
333
383
  }
334
384
 
335
- /**
336
- * The cascade paint context every geom render handler receives. Visual readers such as `getColor`
337
- * see the data tier only; plugin paint should read {@link GeomPaintInput.styleReaders} so tokens,
338
- * overrides, and the built-in default reach the mark.
339
- */
340
- export declare interface GeomPaintInput {
341
- /** The provider's colour scheme — pass to `createStyleResolver` when a plugin needs readers beyond this layer. */
342
- colorScheme: ColorScheme;
343
- /** Cascade readers for this layer: override → data → default, resolved for {@link GeomPaintInput.colorScheme}. */
344
- styleReaders: GeomStyleReaders;
345
- }
346
-
347
385
  /**
348
386
  * A geom's `render`: either a plain panel-SVG paint function, or an overlay-hosted one paired with
349
387
  * `options` — so a geom that must paint into the interactive overlay declares
@@ -394,6 +432,13 @@ export declare interface GeomRenderContract<G extends GeomName | string = string
394
432
  renderHighlight?: (input: HighlightRenderInput<G, C>) => ReactNode;
395
433
  renderHover: (input: HoverRenderInput<G, C>) => ReactNode;
396
434
  renderHoverCompanions: (input: HoverCompanionsRenderInput<G>) => ReactNode;
435
+ /**
436
+ * Editing only: the shapes point and edit outlines for the observations in `layer`, as data in panel pixels.
437
+ * A region is what they cover, one path where there are many, with rounded corners traced into it; a line is
438
+ * a stroke at the width it is drawn; round marks are dots at their size. Omit it and the editor outlines each
439
+ * observation's bounding box.
440
+ */
441
+ getEditOutlineShapes?: (input: EditOutlineShapesInput<G, C>) => readonly EditOutlineShape[];
397
442
  /**
398
443
  * Render-side spatial query for a `'render-hit-test'` layer whose geometry is precomputed into the
399
444
  * scene (sankey ribbons, treemap tiles, voronoi cells). A
@@ -426,7 +471,7 @@ export declare type GeomRendererInput = GeomRenderInput;
426
471
  /** A geom's panel-SVG paint function — the plain `render` form. */
427
472
  export declare type GeomRenderFn<G extends GeomName | string = string, C extends CoordKind = CoordKind> = (input: GeomRenderInput<G, C>) => ReactNode;
428
473
 
429
- declare interface GeomRenderInput<G extends GeomName | string = string, C extends CoordKind = CoordKind> extends GeomPaintInput {
474
+ declare interface GeomRenderInput<G extends GeomName | string = string, C extends CoordKind = CoordKind> extends GeomRenderInputBase {
430
475
  layer: SceneLayerOf<G>;
431
476
  coordSystem: CoordSystemFor<C>;
432
477
  shouldAnimateTransitions: boolean;
@@ -440,6 +485,18 @@ declare interface GeomRenderInput<G extends GeomName | string = string, C extend
440
485
  panelRect: GraphLayout['panel'];
441
486
  }
442
487
 
488
+ /**
489
+ * The cascade paint context every geom render handler receives. Visual readers such as `getColor`
490
+ * see the data tier only; plugin paint should read {@link GeomRenderInputBase.styleReaders} so tokens,
491
+ * overrides, and the built-in default reach the mark.
492
+ */
493
+ export declare interface GeomRenderInputBase {
494
+ /** The provider's colour scheme — pass to `createStyleResolver` when a plugin needs readers beyond this layer. */
495
+ colorScheme: ColorScheme;
496
+ /** Cascade readers for this layer: override → data → default, resolved for {@link GeomRenderInputBase.colorScheme}. */
497
+ styleReaders: GeomStyleReaders;
498
+ }
499
+
443
500
  /**
444
501
  * Hosting options for an overlay render. The presence of the object form already declares overlay hosting;
445
502
  * `overlay: true` makes the call site read explicitly (and leaves room for further hosting options later).
@@ -717,7 +774,7 @@ export declare interface GraphSlots {
717
774
  * and what can render derive from one array and cannot diverge. Generic over the `plugins` tuple so
718
775
  * the typed per-plugin builder methods (`geom.<name>`, …) flow through to the React entry point.
719
776
  */
720
- export declare interface GraphyKit<P extends readonly Plugin_2[] = readonly Plugin_2[]> extends GraphyBuilder<P> {
777
+ export declare interface GraphyKit<P extends readonly Plugin_2[] = readonly Plugin_2[]> extends SpecBuilder<P> {
721
778
  GraphProvider: (props: Omit<GraphProviderProps, 'plugins'>) => ReactElement;
722
779
  }
723
780
 
@@ -758,8 +815,8 @@ export declare interface HeaderSlotProps {
758
815
  isTitleVisible: boolean;
759
816
  subtitle: TextContent | null;
760
817
  isSubtitleVisible: boolean;
761
- headingStyle: ResolvedTextStyle;
762
- subtitleStyle: ResolvedTextStyle;
818
+ headingStyle: TextStyle;
819
+ subtitleStyle: TextStyle;
763
820
  /**
764
821
  * Resolved badge visual for header placement. `hidden` when the mark is off, below the min
765
822
  * footprint, or configured for footer placement.
@@ -792,7 +849,7 @@ declare interface HighlightRenderInput<G extends GeomName | string = string, C e
792
849
  sourceLayer: SceneLayerOf<G>;
793
850
  }
794
851
 
795
- declare interface HoverCompanionsRenderInput<G extends GeomName | string = string> extends GeomPaintInput {
852
+ declare interface HoverCompanionsRenderInput<G extends GeomName | string = string> extends GeomRenderInputBase {
796
853
  layer: SceneLayerOf<G>;
797
854
  primary: HoverHit;
798
855
  related: HoverHit[];
@@ -824,7 +881,7 @@ declare interface HoverProviderProps {
824
881
  children: ReactNode;
825
882
  }
826
883
 
827
- declare interface HoverRenderInput<G extends GeomName | string = string, C extends CoordKind = CoordKind> extends GeomPaintInput {
884
+ declare interface HoverRenderInput<G extends GeomName | string = string, C extends CoordKind = CoordKind> extends GeomRenderInputBase {
828
885
  layer: SceneLayerOf<G>;
829
886
  coordSystem: CoordSystemFor<C>;
830
887
  primary: HoverHit;
@@ -928,13 +985,13 @@ declare type LegendItemAttributes = {
928
985
  /**
929
986
  * Props for the Legend slot, overridable via `slots.Legend` on `GraphRenderer`.
930
987
  *
931
- * A legend filling this slot spreads `stampLegendEditTarget` on every pill it paints where
932
- * `useGuidesTakePress` is true, and lets the pill take the pointer, or a press there selects the chart:
933
- * the press reads the legend and the item a pill stands for off those attributes.
988
+ * A legend filling this slot spreads `stampLegendEditTarget` on every pill and direct label it paints where
989
+ * `useGuidesTakePress` is true, and lets it take the pointer, or a press there selects the chart: the press
990
+ * reads the legend and the item it stands for off those attributes.
934
991
  */
935
992
  export declare interface LegendSlotProps {
936
993
  formattedLegends: FormattedLegend[];
937
- rects: Partial<Record<LayoutEdge, Rect>>;
994
+ rects: Partial<Record<Edge, Rect>>;
938
995
  }
939
996
 
940
997
  /** Scales the color's HSL lightness up by `amount` (0–1). */
@@ -943,6 +1000,15 @@ export declare const lightenCss: (colorString: string, amount: number) => string
943
1000
  /** vanilla-extract class that binds the light token values; the default theme. */
944
1001
  export declare const lightTheme: string;
945
1002
 
1003
+ declare interface MorphingEditOutlineShape {
1004
+ /** SVG path data in panel pixels. */
1005
+ pathData: string;
1006
+ /** Identifies the shape across renders, such as a line's group, so a morph starts from where it was. */
1007
+ key?: string;
1008
+ /** Whether a change of shape morphs to the new one, as the geom's paint does. Snaps when omitted. */
1009
+ shouldAnimateTransitions?: boolean;
1010
+ }
1011
+
946
1012
  /**
947
1013
  * Anchor point in normalized [0,1] coord-space where a highlight overlay marker
948
1014
  * should be painted for one observation. Renderer turns [0,1] into pixels.
@@ -1074,6 +1140,12 @@ export declare const stampGridEditTarget: (scaleAestheticKey: ScaledPositionAest
1074
1140
  /** Identifies a legend pill and the compiled item its label represents. */
1075
1141
  export declare const stampLegendEditTarget: (address: LegendItemAddress) => LegendEditTargetAttributes;
1076
1142
 
1143
+ /**
1144
+ * The style readers a handler that cannot call `useStyleReaders` receives: a built-in geom's own, whose
1145
+ * builtin-backed properties resolve NonNullable, and the shared readers for a custom geom.
1146
+ */
1147
+ declare type StyleReadersOf<G extends GeomName | string> = G extends GeomName ? StyleReadersForLayer<SceneLayerFor<G>> : GeomStyleReaders;
1148
+
1077
1149
  /**
1078
1150
  * The vocabulary of legend/tooltip/headline marks the {@link Swatch} can paint. A geom picks the one
1079
1151
  * that best evokes its on-canvas mark via `swatchShape` on its render contract (see
@@ -1099,7 +1171,7 @@ export declare interface SwatchSlotProps {
1099
1171
  color: string;
1100
1172
  surface: SwatchSurface;
1101
1173
  label?: string;
1102
- lineType?: LineStyleType;
1174
+ lineType?: LineType;
1103
1175
  width?: number;
1104
1176
  height?: number;
1105
1177
  /** Line/area stroke width. Absent, {@link DefaultSwatch} draws at 2. */
@@ -1446,7 +1518,7 @@ export declare const vars: {
1446
1518
  overlayBorderGradient: `var(--${string})`;
1447
1519
  graphBackground: `var(--${string})`;
1448
1520
  legendFocusOutlineColor: `var(--${string})`;
1449
- annotationFrameBorderColor: `var(--${string})`;
1521
+ annotationOutlineColor: `var(--${string})`;
1450
1522
  editMenuTriggerIconColor: `var(--${string})`;
1451
1523
  tooltipRowGap: `var(--${string})`;
1452
1524
  editorControlHeight: `var(--${string})`;