@graphysdk/react-renderer 1.9.0-beta.1789633145847 → 1.9.0-beta.1789669748378

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{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}._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}._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%)}._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-DeVbcR29.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]),K=(0,d.useCallback)(()=>x(v.undo()),[v,x]),A=(0,d.useCallback)(()=>x(v.redo()),[v,x]),te=(0,d.useMemo)(()=>({stack:v.history,undo:K,redo:A}),[v,K,A]),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",Ke="drqe3ua";var Ae="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)(Ke,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:Ae,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.stampGridEditTarget=c.stampGridEditTarget;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-RyLhych9.cjs"),se=require("./theme.contract.css-DKDKSByt.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,9 +60,20 @@ 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
66
 
67
+ /** The axis identity and optional tick address spread onto a label's containing group. */
68
+ export declare type AxisEditTargetAttributes = {
69
+ /** The axis family read by the editor. */
70
+ [EDIT_TARGET_KIND_ATTRIBUTE]: 'axis';
71
+ /** The position scale selected by a press on the label. */
72
+ [EDIT_TARGET_AXIS_ATTRIBUTE]: ScaledPositionAestheticKey;
73
+ /** The rendered tick index used for double-click narrowing; absent for a title. */
74
+ [EDIT_TARGET_TICK_INDEX_ATTRIBUTE]?: string;
75
+ };
76
+
67
77
  /**
68
78
  * Props for the AxisLabel slot — the axis title of every axis (e.g. "Revenue"), overridable via
69
79
  * `slots.AxisLabel`. `labelRects` are SVG-local, keyed by edge. The tick band is a separate slot — see
@@ -71,7 +81,7 @@ import { VizDiagnostic } from '@graphysdk/viz-engine';
71
81
  */
72
82
  export declare interface AxisLabelSlotProps {
73
83
  formattedAxes: FormattedAxis[];
74
- labelRects: Partial<Record<LayoutEdge, Rect>>;
84
+ labelRects: Partial<Record<Edge, Rect>>;
75
85
  }
76
86
 
77
87
  /**
@@ -81,7 +91,7 @@ export declare interface AxisLabelSlotProps {
81
91
  */
82
92
  export declare interface AxisTicksSlotProps {
83
93
  formattedAxes: FormattedAxis[];
84
- tickRects: Partial<Record<LayoutEdge, Rect>>;
94
+ tickRects: Partial<Record<Edge, Rect>>;
85
95
  }
86
96
 
87
97
  /** Made with Graphy provenance badge — capsule + glyph + system-face copy. */
@@ -162,11 +172,11 @@ declare type CoordSystemFor<C extends CoordKind> = C extends 'cartesian' ? Carte
162
172
  /**
163
173
  * Ergonomic entry point for a React app: pass `plugins` once and get back a {@link GraphyKit} — the
164
174
  * typed builder plus a `GraphProvider` that already carries them. Pure sugar over the primitives
165
- * (`createGraphyBuilder`, `<GraphProvider plugins>`); use those directly for headless or advanced
175
+ * (`createSpecBuilder`, `<GraphProvider plugins>`); use those directly for headless or advanced
166
176
  * wiring. The `const` type parameter captures the `plugins` tuple literally, so `kit.geom.<customName>`
167
177
  * is typed.
168
178
  */
169
- export declare function createGraphyKit<const P extends readonly Plugin_2[] = []>(options?: CreateGraphyBuilderOptions<P>): GraphyKit<P>;
179
+ export declare function createGraphyKit<const P extends readonly Plugin_2[] = []>(options?: CreateSpecBuilderOptions<P>): GraphyKit<P>;
170
180
 
171
181
  /**
172
182
  * Per-chart Zustand store for what is selected. Nothing in the geom paint path reads it, so a
@@ -199,7 +209,7 @@ export declare const DefaultHeader: ({ ref, headerRect, mode, title, isTitleVisi
199
209
  export declare const DefaultSwatch: ({ shape, color, lineType, width, height, strokeWidth, alpha, cornerRadius, }: Omit<SwatchSlotProps, "surface" | "label">) => JSX.Element;
200
210
 
201
211
  /**
202
- * Default tooltip body. Paints the box, header, and rows from the formatted {@link content}, and
212
+ * Default tooltip body. Paints the box, heading, and rows from the formatted {@link content}, and
203
213
  * resolves each row's swatch shape off its geom's render contract for the active coord system.
204
214
  * Positioning lives in the {@link Tooltip} wrapper, never here.
205
215
  */
@@ -248,12 +258,17 @@ declare const EDIT_TARGET_AXIS_ATTRIBUTE = "data-edit-axis";
248
258
  /** Names the family painted by a node, which the shared pointer resolver reads. */
249
259
  declare const EDIT_TARGET_KIND_ATTRIBUTE = "data-edit-kind";
250
260
 
261
+ /** Indexes the axis's rendered FormattedAxis.ticks array for double-click narrowing. */
262
+ declare const EDIT_TARGET_TICK_INDEX_ATTRIBUTE = "data-edit-tick-index";
263
+
251
264
  /** Props the renderer passes to the editor layer filling the `EditorSurface` slot. */
252
265
  export declare interface EditorSurfaceSlotProps {
253
266
  /** The frame's content box — the element the layer measures, listens on and aligns its chrome to. */
254
267
  frameElement: HTMLElement;
255
268
  /** The panel's rect within that box, so chrome positioned from `layout` shares its origin. */
256
269
  panelRect: Rect;
270
+ /** The axes as the chart paints them, whose ticks a stamped tick index addresses. */
271
+ formattedAxes: readonly FormattedAxis[];
257
272
  }
258
273
 
259
274
  /**
@@ -270,8 +285,8 @@ export declare interface FooterSlotProps {
270
285
  isCaptionVisible: boolean;
271
286
  source: SourceContent | null;
272
287
  isSourceVisible: boolean;
273
- captionStyle: ResolvedTextStyle;
274
- sourceStyle: ResolvedSourceStyle;
288
+ captionStyle: TextStyle;
289
+ sourceStyle: SourceStyle;
275
290
  /**
276
291
  * Resolved badge visual for footer placement. `hidden` when the mark is off, below the min
277
292
  * footprint, or configured for header placement.
@@ -317,18 +332,6 @@ export declare interface GeomOverlayRenderInput<G extends GeomName | string = st
317
332
  overlay: InteractiveOverlayApi;
318
333
  }
319
334
 
320
- /**
321
- * The cascade paint context every geom render handler receives. Visual readers such as `getColor`
322
- * see the data tier only; plugin paint should read {@link GeomPaintInput.styleReaders} so tokens,
323
- * overrides, and the built-in default reach the mark.
324
- */
325
- export declare interface GeomPaintInput {
326
- /** The provider's colour scheme — pass to `createStyleResolver` when a plugin needs readers beyond this layer. */
327
- colorScheme: ColorScheme;
328
- /** Cascade readers for this layer: override → data → default, resolved for {@link GeomPaintInput.colorScheme}. */
329
- styleReaders: GeomStyleReaders;
330
- }
331
-
332
335
  /**
333
336
  * A geom's `render`: either a plain panel-SVG paint function, or an overlay-hosted one paired with
334
337
  * `options` — so a geom that must paint into the interactive overlay declares
@@ -411,7 +414,7 @@ export declare type GeomRendererInput = GeomRenderInput;
411
414
  /** A geom's panel-SVG paint function — the plain `render` form. */
412
415
  export declare type GeomRenderFn<G extends GeomName | string = string, C extends CoordKind = CoordKind> = (input: GeomRenderInput<G, C>) => ReactNode;
413
416
 
414
- declare interface GeomRenderInput<G extends GeomName | string = string, C extends CoordKind = CoordKind> extends GeomPaintInput {
417
+ declare interface GeomRenderInput<G extends GeomName | string = string, C extends CoordKind = CoordKind> extends GeomRenderInputBase {
415
418
  layer: SceneLayerOf<G>;
416
419
  coordSystem: CoordSystemFor<C>;
417
420
  shouldAnimateTransitions: boolean;
@@ -425,6 +428,18 @@ declare interface GeomRenderInput<G extends GeomName | string = string, C extend
425
428
  panelRect: GraphLayout['panel'];
426
429
  }
427
430
 
431
+ /**
432
+ * The cascade paint context every geom render handler receives. Visual readers such as `getColor`
433
+ * see the data tier only; plugin paint should read {@link GeomRenderInputBase.styleReaders} so tokens,
434
+ * overrides, and the built-in default reach the mark.
435
+ */
436
+ export declare interface GeomRenderInputBase {
437
+ /** The provider's colour scheme — pass to `createStyleResolver` when a plugin needs readers beyond this layer. */
438
+ colorScheme: ColorScheme;
439
+ /** Cascade readers for this layer: override → data → default, resolved for {@link GeomRenderInputBase.colorScheme}. */
440
+ styleReaders: GeomStyleReaders;
441
+ }
442
+
428
443
  /**
429
444
  * Hosting options for an overlay render. The presence of the object form already declares overlay hosting;
430
445
  * `overlay: true` makes the call site read explicitly (and leaves room for further hosting options later).
@@ -702,7 +717,7 @@ export declare interface GraphSlots {
702
717
  * and what can render derive from one array and cannot diverge. Generic over the `plugins` tuple so
703
718
  * the typed per-plugin builder methods (`geom.<name>`, …) flow through to the React entry point.
704
719
  */
705
- export declare interface GraphyKit<P extends readonly Plugin_2[] = readonly Plugin_2[]> extends GraphyBuilder<P> {
720
+ export declare interface GraphyKit<P extends readonly Plugin_2[] = readonly Plugin_2[]> extends SpecBuilder<P> {
706
721
  GraphProvider: (props: Omit<GraphProviderProps, 'plugins'>) => ReactElement;
707
722
  }
708
723
 
@@ -743,8 +758,8 @@ export declare interface HeaderSlotProps {
743
758
  isTitleVisible: boolean;
744
759
  subtitle: TextContent | null;
745
760
  isSubtitleVisible: boolean;
746
- headingStyle: ResolvedTextStyle;
747
- subtitleStyle: ResolvedTextStyle;
761
+ headingStyle: TextStyle;
762
+ subtitleStyle: TextStyle;
748
763
  /**
749
764
  * Resolved badge visual for header placement. `hidden` when the mark is off, below the min
750
765
  * footprint, or configured for footer placement.
@@ -777,7 +792,7 @@ declare interface HighlightRenderInput<G extends GeomName | string = string, C e
777
792
  sourceLayer: SceneLayerOf<G>;
778
793
  }
779
794
 
780
- declare interface HoverCompanionsRenderInput<G extends GeomName | string = string> extends GeomPaintInput {
795
+ declare interface HoverCompanionsRenderInput<G extends GeomName | string = string> extends GeomRenderInputBase {
781
796
  layer: SceneLayerOf<G>;
782
797
  primary: HoverHit;
783
798
  related: HoverHit[];
@@ -809,7 +824,7 @@ declare interface HoverProviderProps {
809
824
  children: ReactNode;
810
825
  }
811
826
 
812
- declare interface HoverRenderInput<G extends GeomName | string = string, C extends CoordKind = CoordKind> extends GeomPaintInput {
827
+ declare interface HoverRenderInput<G extends GeomName | string = string, C extends CoordKind = CoordKind> extends GeomRenderInputBase {
813
828
  layer: SceneLayerOf<G>;
814
829
  coordSystem: CoordSystemFor<C>;
815
830
  primary: HoverHit;
@@ -882,10 +897,44 @@ declare interface IntroAnimationOptions {
882
897
  maxAnimatedGeoms: number;
883
898
  }
884
899
 
885
- /** Props for the Legend slot, overridable via `slots.Legend` on `GraphRenderer`. */
900
+ /** Which of the chart's drawn legends a pill belongs to. */
901
+ declare const LEGEND_INDEX_ATTRIBUTE = "data-legend-index";
902
+
903
+ /** Which item of that legend the pill paints. */
904
+ declare const LEGEND_ITEM_INDEX_ATTRIBUTE = "data-legend-item-index";
905
+
906
+ /** The legend identity and item address spread onto a pill. */
907
+ export declare type LegendEditTargetAttributes = LegendItemAttributes & {
908
+ /** The legend family read by the editor. */
909
+ [EDIT_TARGET_KIND_ATTRIBUTE]: 'legend';
910
+ };
911
+
912
+ /** Where the item a pill paints sits in the chart's drawn legends. */
913
+ export declare interface LegendItemAddress {
914
+ /** Counts `formattedLegends`, which `formatLegends` maps one to one from `guides.legends.drawn`. */
915
+ legendIndex: number;
916
+ /** Counts that legend's items, in the order it lists them. */
917
+ itemIndex: number;
918
+ }
919
+
920
+ /** The inert attributes a pill carries, spread onto the element it already renders. */
921
+ declare type LegendItemAttributes = {
922
+ /** The drawn legend index read by the editor. */
923
+ [LEGEND_INDEX_ATTRIBUTE]: string;
924
+ /** The item index within the drawn legend read by the editor. */
925
+ [LEGEND_ITEM_INDEX_ATTRIBUTE]: string;
926
+ };
927
+
928
+ /**
929
+ * Props for the Legend slot, overridable via `slots.Legend` on `GraphRenderer`.
930
+ *
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.
934
+ */
886
935
  export declare interface LegendSlotProps {
887
936
  formattedLegends: FormattedLegend[];
888
- rects: Partial<Record<LayoutEdge, Rect>>;
937
+ rects: Partial<Record<Edge, Rect>>;
889
938
  }
890
939
 
891
940
  /** Scales the color's HSL lightness up by `amount` (0–1). */
@@ -1011,9 +1060,20 @@ export declare interface SlotOverride<Props, Measure> {
1011
1060
  measure: Measure;
1012
1061
  }
1013
1062
 
1063
+ /**
1064
+ * Identifies an axis label and its rendered tick; omitting the tick index identifies an axis title. The
1065
+ * index is the tick's place in `FormattedAxis.ticks` as the layout handed them, which a double click reads
1066
+ * the tick back from, so a slot drawing only some of the ticks still stamps each with its index in the full
1067
+ * array.
1068
+ */
1069
+ export declare const stampAxisEditTarget: (scaleAestheticKey: ScaledPositionAestheticKey, tickIndex?: number) => AxisEditTargetAttributes;
1070
+
1014
1071
  /** Identifies one drawn grid line of a scale, on the group holding its stroke and its hit stroke. */
1015
1072
  export declare const stampGridEditTarget: (scaleAestheticKey: ScaledPositionAestheticKey) => GridEditTargetAttributes;
1016
1073
 
1074
+ /** Identifies a legend pill and the compiled item its label represents. */
1075
+ export declare const stampLegendEditTarget: (address: LegendItemAddress) => LegendEditTargetAttributes;
1076
+
1017
1077
  /**
1018
1078
  * The vocabulary of legend/tooltip/headline marks the {@link Swatch} can paint. A geom picks the one
1019
1079
  * that best evokes its on-canvas mark via `swatchShape` on its render contract (see
@@ -1039,7 +1099,7 @@ export declare interface SwatchSlotProps {
1039
1099
  color: string;
1040
1100
  surface: SwatchSurface;
1041
1101
  label?: string;
1042
- lineType?: LineStyleType;
1102
+ lineType?: LineType;
1043
1103
  width?: number;
1044
1104
  height?: number;
1045
1105
  /** Line/area stroke width. Absent, {@link DefaultSwatch} draws at 2. */
@@ -1386,7 +1446,7 @@ export declare const vars: {
1386
1446
  overlayBorderGradient: `var(--${string})`;
1387
1447
  graphBackground: `var(--${string})`;
1388
1448
  legendFocusOutlineColor: `var(--${string})`;
1389
- annotationFrameBorderColor: `var(--${string})`;
1449
+ annotationOutlineColor: `var(--${string})`;
1390
1450
  editMenuTriggerIconColor: `var(--${string})`;
1391
1451
  tooltipRowGap: `var(--${string})`;
1392
1452
  editorControlHeight: `var(--${string})`;