@graphysdk/react-renderer 1.9.0-beta.1789467548664 → 1.9.0-beta.1789545386500
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/editable.cjs +1 -1
- package/dist/editable.css +1 -1
- package/dist/editable.d.ts +5 -5
- package/dist/editable.mjs +161 -161
- package/dist/graph-config.cjs +1 -1
- package/dist/graph-config.d.ts +11 -11
- package/dist/graph-config.mjs +1 -1
- package/dist/{history-chords-DYyA8P8x.js → history-chords-DUMZMIc_.js} +1138 -1134
- package/dist/{history-chords-PbUU5Ryz.cjs → history-chords-kAwHzxZz.cjs} +2 -2
- package/dist/history-chords.css +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +60 -53
- package/dist/index.mjs +150 -149
- package/dist/{theme.contract.css-pudzI2o1.js → theme.contract.css-DaZ5UPN0.js} +11 -11
- package/dist/{theme.contract.css-CEjZ4rbL.cjs → theme.contract.css-Dd-73-Je.cjs} +1 -1
- package/package.json +2 -2
package/dist/history-chords.css
CHANGED
|
@@ -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-grey-100:#fff;--graphy-grey-95:#fcfcfc;--graphy-grey-90:#fafafa;--graphy-grey-85:#f5f5f5;--graphy-grey-80:#f0f0f0;--graphy-grey-75:#e8e8e8;--graphy-grey-70:#e5e5e5;--graphy-grey-60:#ccc;--graphy-grey-50:#c4c4c4;--graphy-grey-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-grey-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-grey-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-grey-0);--graphy-border-50:color-mix(in srgb, transparent, var(--graphy-grey-0) 50%);--graphy-border-10:color-mix(in srgb, transparent, var(--graphy-grey-0) 10%);--graphy-sunken-background:var(--graphy-grey-90);--graphy-default-background:var(--graphy-grey-100);--graphy-raised-background:var(--graphy-grey-85);--graphy-overlay-background:var(--graphy-grey-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-grey-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-grey-80);--graphy-toolbar-button-background-color-selected:var(--graphy-grey-60);--graphy-toolbar-separator-color:var(--graphy-grey-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-grey-100:#000;--graphy-grey-95:#0d0d0d;--graphy-grey-90:#1a1a1a;--graphy-grey-85:#1f1f1f;--graphy-grey-80:#2a2a2a;--graphy-grey-75:#2e2e2e;--graphy-grey-70:#353535;--graphy-grey-60:#494949;--graphy-grey-50:#6f6f6f;--graphy-grey-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-grey-gradient-80:linear-gradient(to top, #222429, #31353f);--graphy-text-primary:var(--graphy-grey-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-grey-70);--graphy-border-100:var(--graphy-grey-0);--graphy-border-50:color-mix(in srgb, transparent, var(--graphy-grey-0) 50%);--graphy-border-10:color-mix(in srgb, transparent, var(--graphy-grey-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-grey-100);--graphy-default-background:var(--graphy-grey-90);--graphy-raised-background:var(--graphy-grey-80);--graphy-overlay-background:var(--graphy-grey-90);--graphy-overlay-border-gradient:var(--graphy-grey-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-grey-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-grey-80);--graphy-toolbar-button-background-color-selected:var(--graphy-grey-60);--graphy-toolbar-separator-color:var(--graphy-grey-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-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}
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('./index.css');const l=require("./history-chords-PbUU5Ryz.cjs"),se=require("./theme.contract.css-CEjZ4rbL.cjs");let g=require("@graphysdk/viz-engine"),c=require("react"),i=require("react/jsx-runtime"),A=require("zustand"),B=require("zustand/vanilla"),$=require("clsx");$=l.__toESM($,1);var ne="_1a5iqpb0",oe="_1a5iqpb1";var ie="_1a5iqpb3",ae="_1a5iqpb4",le="_1a5iqpb5";var L=({errors:e})=>{const[t,...r]=e;return(0,i.jsxs)("div",{role:"alert",className:ne,children:[(0,i.jsx)("strong",{className:oe,children:"This chart could not be rendered."}),t&&(0,i.jsx)(U,{diagnostic:t}),r.length>0&&(0,i.jsx)("ul",{className:"_1a5iqpb2",children:r.map((s,o)=>(0,i.jsx)("li",{children:(0,i.jsx)(U,{diagnostic:s})},`${s.code}-${o}`))})]})},U=({diagnostic:e})=>(0,i.jsxs)("div",{className:ie,children:[(0,i.jsx)("span",{className:ae,children:e.code}),(0,i.jsx)("p",{className:le,children:e.message}),e.suggestion&&(0,i.jsx)("p",{className:"_1a5iqpb6",children:e.suggestion})]});function ce(e=[],t=[]){return e.length===t.length&&e.every((r,s)=>Object.is(r,t[s]))}var W=class extends c.Component{constructor(...e){super(...e),this.state={caughtDiagnostic:null}}static getDerivedStateFromError(e){return{caughtDiagnostic:(0,g.buildDiagnostic)(e)}}componentDidCatch(e,t){const r=(0,g.buildDiagnostic)(e);l.logDiagnostics([r]),this.props.onError?.([r]),console.error("Chart render component stack:",t.componentStack)}componentDidUpdate(e){this.state.caughtDiagnostic&&!ce(e.resetKeys,this.props.resetKeys)&&this.setState({caughtDiagnostic:null})}render(){const{caughtDiagnostic:e}=this.state;if(e)return(0,i.jsx)(L,{errors:[e]});const{forcedErrors:t,children:r}=this.props;return t&&t.length>0?(0,i.jsx)(L,{errors:t}):r}},z=e=>typeof e=="object"&&"geom"in e&&"render"in e,de=e=>{const t=(0,g.resolveDefinition)(e);return t instanceof g.Geom?t:null},X=(e,t)=>{const r=e.filter(s=>ue(s,t));return r.length===e.length?e:r},ue=(e,t)=>e.kind==="annotation"?(0,g.findAnnotation)(t.annotations,e.id)!==null:e.kind==="observations"||e.kind==="layer"&&e.layerId!==void 0?(0,g.findLayerById)(t.layers,e.layerId)!==void 0:!0,Y=[],me=()=>(0,B.createStore)(e=>({selection:Y,setSelection:t=>e(r=>he(r.selection,t)?r:{selection:t}),clearSelection:()=>e(t=>t.selection.length===0?t:{selection:Y})})),he=(e,t)=>e===t?!0:e.length!==t.length?!1:e.every((r,s)=>{const o=t[s];return o!==void 0&&(0,g.areEditTargetsEqual)(r,o)}),ge=process.env.NODE_ENV!=="production",pe=5,fe=e=>{if(!ge)return{emit:()=>{},subscribe:()=>ye,getLastTrigger:()=>null,getLastCompile:()=>null,getCacheStats:()=>e.getCacheStats()};const t=new Set;let r=null;return{emit:s=>{const o=e.getLastCompile();if(o){r=s;for(const d of t)d(s,o)}},subscribe:s=>(t.add(s),()=>{t.delete(s)}),getLastTrigger:()=>r,getLastCompile:()=>e.getLastCompile(),getCacheStats:()=>e.getCacheStats()}},ve=()=>(0,B.createStore)(e=>({lastCompile:null,history:[],nextId:1,lastSnapshot:null,recordCompile:(t,r)=>e(s=>{if(s.lastSnapshot===r)return s;const o={id:s.nextId,label:Se(t),stages:r.stages,durationMs:r.durationMs};return{lastCompile:o,history:be(s.history,o,pe),nextId:s.nextId+1,lastSnapshot:r}})})),ye=()=>{},Se=e=>{switch(e.kind){case"init":return"init";case"input":return"input change";case"data":return"data change";case"command":return e.command.metadata.description}},be=(e,t,r)=>{const s=e.length>=r?e.length-(r-1):0;return[...e.slice(s),t]};function Ee(e){const t=e.filter(z),r=new Set([...Object.keys(l.BUILT_IN_GEOM_RENDERERS),...t.map(u=>u.geom)]),s=[],o=new Set;for(const u of e){const h=de(u);h===null||r.has(h.type)||o.has(h.type)||(o.add(h.type),s.push({kind:"user-input",severity:"error",code:"MISSING_GEOM_RENDERER",message:`Custom geom '${h.type}' is registered but has no renderer.`,context:{requested:h.type,kind:"geom-renderer"},suggestion:`Add a render half for it: \`defineGeomRenderer(${h.type}Geom, { coord, render })\`, then include it in \`plugins\`.`}))}const d=new Map;for(const u of t){if("definition"in u)continue;const h=`${u.geom}|${u.coord}`,p=d.get(h);p?p.count+=1:d.set(h,{geom:u.geom,coord:u.coord,count:1})}const a=[];for(const{geom:u,coord:h,count:p}of d.values())p<2||a.push({kind:"user-input",severity:"warning",code:"DUPLICATE_REGISTERED_TYPE",message:`Multiple render-only overrides register ('${u}', '${h}') (${p} entries); the last in the array wins.`,context:{requested:`${u}@${h}`,kind:"geom-renderer"},suggestion:`Keep a single render-only override for ('${u}', '${h}').`});return{errors:s,warnings:a}}function Ce(e,t){const{coordSystem:r,layers:s}=e,o=new Set,d=[];for(const a of s)t(a.geom,r.type)!==null||o.has(a.geom)||(o.add(a.geom),d.push({kind:"user-input",severity:"warning",code:"MISSING_GEOM_RENDERER",message:`No renderer for geom '${a.geom}' under ${r.type} coords; the layer is not painted.`,context:{requested:a.geom,kind:"geom-renderer"},suggestion:`Register a renderer for ('${a.geom}', '${r.type}') via \`defineGeomRenderer\`.`}));return d}function xe(e,t){const{coordSystem:r,layers:s}=e,o=new Set,d=[];for(const a of s){if(a.interactive===!1||a.spatialKind!=="render-hit-test"||o.has(a.geom))continue;const u=t(a.geom,r.type);u===null||u.hitTest||l.isOverlayHosted(u)||(o.add(a.geom),d.push({kind:"user-input",severity:"warning",code:"MISSING_RENDER_HIT_TEST",message:`Geom '${a.geom}' declares spatialKind 'render-hit-test' but its renderer provides no hit-test; the layer has no hover.`,context:{requested:a.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 ('${a.geom}', '${r.type}').`}))}return d}function Te(e){const t=new Set,r=[];for(const s of e.layers){const o=s.identityKey;s.interactive!==!1&&(s.spatialKind!=="render-hit-test"||typeof o!="object"||t.has(s.geom)||s.data.hasVariable(o.variable)||(t.add(s.geom),r.push({kind:"user-input",severity:"warning",code:"RENDER_HIT_TEST_IDENTITY",message:`Geom '${s.geom}' keys its identity on '${o.variable}', a column its compile output does not emit; its hover lookup is empty.`,context:{requested:s.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 r}function Re(e,t){const{coordSystem:r,layers:s}=e,o=new Set,d=[];for(const a of s){if(a.interactive===!1||a.spatialKind!=="render-hit-test"||o.has(a.geom))continue;const u=t(a.geom,r.type);u===null||!u.hitTest||!l.isOverlayHosted(u)||(o.add(a.geom),d.push({kind:"user-input",severity:"warning",code:"CONFLICTING_RENDER_HIT_TEST",message:`Geom '${a.geom}' declares both a \`hitTest\` factory and an overlay render; these are alternatives, so only the overlay is used.`,context:{requested:a.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 d}function qe(e,t){const r=new Set,s=[];for(const o of e.layers)o.interactive!==!1&&(o.spatialKind!=="render-hit-test"||r.has(o.geom)||t.hasCapability(o.geom)||(r.add(o.geom),s.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 s}function Ge(e,t){const{coordSystem:r,layers:s}=e,o=new Set,d=[];for(const a of s){if(a.interactive===!1||a.spatialKind==="render-hit-test"||o.has(a.geom))continue;const u=t(a.geom,r.type);u===null||!l.isOverlayHosted(u)||(o.add(a.geom),d.push({kind:"user-input",severity:"warning",code:"OVERLAY_REQUIRES_RENDER_HIT_TEST",message:`Geom '${a.geom}' declares an overlay render but its layer's spatialKind is '${a.spatialKind}', not 'render-hit-test'; the overlay's push-path hover resolves to nothing.`,context:{requested:a.geom,kind:"geom-renderer"},suggestion:"Have the geom's manifest yield spatialKind 'render-hit-test' so the compiled layer carries the `byKey` index the overlay's `pushHover` resolves against."}))}return d}var ke=e=>(0,B.createStore)(t=>({compiled:e,setCompiled:r=>t(s=>s.compiled===r?s:{compiled:r})})),Ne=({input:e,data:t,customPalettes:r,colorScheme:s,plugins:o,resolveRenderer:d,anchorResolver:a,onChange:u,onError:h,onWarnings:p})=>{const x=l.useLatestRef(u),k=l.useLatestRef(h),q=l.useLatestRef(p),[{session:f,compileBus:m}]=(0,c.useState)(()=>{const n=(0,g.createCompiler)({plugins:o});return{session:new g.GraphCompilationSession(n),compileBus:fe(n)}}),[y]=(0,c.useState)(()=>Ee(o??[])),S=(0,c.useRef)(null),[N]=(0,c.useState)(_e),T=(0,c.useRef)(null),b=(0,c.useCallback)(n=>y.errors.length===0?n:[...y.errors,...n??[]],[y]),j=(0,c.useCallback)(n=>{if(!n.ok)return n.errors;if(T.current)T.current.getState().setCompiled(n.compiled);else{const v=ke(n.compiled);v.subscribe(N.notify),T.current=v,N.notify()}return null},[N]),[I,D]=(0,c.useState)(()=>{const n=f.compile({input:e,data:t,customPalettes:r,colorScheme:s});return S.current=n,b(j(n))}),G=(0,c.useCallback)(n=>n.ok?[...n.warnings,...Ce(n.compiled,d),...xe(n.compiled,d),...Te(n.compiled),...Re(n.compiled,d),...Ge(n.compiled,d),...qe(n.compiled,a)]:n.warnings,[d,a]),E=(0,c.useCallback)(n=>{n.length!==0&&(l.logDiagnostics(n),k.current?.(n))},[k]),R=(0,c.useCallback)(n=>{n.length!==0&&(l.logDiagnostics(n),q.current?.(n))},[q]);(0,c.useEffect)(()=>{const n=S.current;n&&(E([...y.errors,...n.ok?[]:n.errors]),R([...y.warnings,...G(n)]),n.ok&&m.emit({kind:"init"}))},[m,E,R,y,G]),(0,c.useEffect)(()=>{const n=f.update({input:e,data:t,customPalettes:r,colorScheme:s});if(!n)return;n.sealedInput&&x.current?.(n.sealedInput);const v=j(n.result);D(b(v)),v&&E(v),R(G(n.result)),v||m.emit({kind:n.inputChanged?"input":"data"})},[e,t,r,s,f,m,j,E,R,b,G,x]);const _=(0,c.useCallback)(n=>{D(v=>v===null?v:b(null)),R(G(n))},[b,R,G]),w=(0,c.useCallback)(n=>{n.compiled&&T.current?.getState().setCompiled(n.compiled),n.result&&_(n.result),n.command&&m.emit({kind:"command",command:n.command}),n.input&&x.current?.(n.input),n.errors&&E([...n.errors])},[_,m,x,E]),C=(0,c.useCallback)(n=>{for(const v of n)w(v);return n.some(v=>!!v.compiled)},[w]),M=(0,c.useCallback)((n,v)=>{C(f.applyCommand(n,v))},[f,C]),ee=(0,c.useCallback)(()=>{C(f.seal())},[f,C]),O=(0,c.useCallback)(()=>C(f.undo()),[f,C]),K=(0,c.useCallback)(()=>C(f.redo()),[f,C]),te=(0,c.useMemo)(()=>({stack:f.history,undo:O,redo:K}),[f,O,K]),re=(0,c.useCallback)(()=>T.current?.getState().compiled??null,[]);return{store:T.current,dispatch:M,seal:ee,history:te,subscribe:N.subscribe,getCompiled:re,compileBus:m,compileErrors:I}},_e=()=>{const e=new Set;return{subscribe:t=>(e.add(t),()=>{e.delete(t)}),notify:()=>e.forEach(t=>t())}},Q=({data:e,input:t,plugins:r=[],formattingLocale:s,handleRef:o,onChange:d,onError:a,onWarnings:u,customPalettes:h,colorScheme:p="light",children:x})=>{const[k]=(0,c.useState)(()=>l.createGeomRendererResolver(r.filter(z))),q=(0,c.useId)(),[f]=(0,c.useState)(()=>(0,g.createAnchorResolver)(r)),[m]=(0,c.useState)(()=>me()),y=(0,c.useMemo)(()=>(0,g.createStyleResolver)({colorScheme:p}),[p]),{store:S,dispatch:N,seal:T,history:b,subscribe:j,getCompiled:I,compileBus:D,compileErrors:G}=Ne({input:t,data:e,customPalettes:h,colorScheme:p,plugins:r,resolveRenderer:k,anchorResolver:f,onChange:d,onError:a,onWarnings:u});(0,c.useEffect)(()=>{if(S)return S.subscribe((_,w)=>{if(_.compiled.spec===w.compiled.spec)return;const{selection:C,setSelection:M}=m.getState();C.length!==0&&M(X(C,_.compiled.spec))})},[S,m]);const E=(0,c.useMemo)(()=>({dispatch:N,seal:T}),[N,T]);(0,c.useImperativeHandle)(o,()=>({commands:E,undo:b.undo,redo:b.redo,subscribe:j,getCompiled:I,getSelection:()=>m.getState().selection,setSelection:_=>m.getState().setSelection(_),subscribeSelection:m.subscribe}),[E,b,j,I,m]);const R=(0,c.useMemo)(()=>S?{chartId:q,store:S,selectionStore:m,commands:E,history:b,formattingLocale:s,compileBus:D,colorScheme:p,styleResolver:y,anchorResolver:f}:null,[q,S,m,E,b,s,D,p,y,f]);return(0,i.jsx)(W,{forcedErrors:G,onError:a,resetKeys:[t,e],children:R?(0,i.jsx)(l.GraphContext.Provider,{value:R,children:(0,i.jsx)(l.GeomRendererResolverProvider,{value:k,children:x})}):null})};function je(e){const t=(0,g.createGraphyBuilder)(e);return{...t,GraphProvider:s=>(0,i.jsx)(Q,{...s,plugins:t.plugins})}}var De=({children:e,...t})=>(0,i.jsx)("svg",{viewBox:"0 0 1 1",preserveAspectRatio:"none",width:"100%",height:"100%",pointerEvents:"none",...t,children:e}),Ie=({box:e,children:t})=>(0,i.jsx)("svg",{x:(0,g.toPercent)(e.x0),y:(0,g.toPercent)(e.y0),width:(0,g.toPercent)(e.x1-e.x0),height:(0,g.toPercent)(e.y1-e.y0),overflow:"hidden",pointerEvents:"none",children:t}),we="drqe3u0",He="drqe3u1",Me="drqe3u2",Pe="drqe3u3",H="drqe3u4",$e="drqe3u5",Le="drqe3u6",Be="drqe3u7",P="drqe3u8",Oe="drqe3u9",Ke="drqe3ua";var Ae="drqe3uc",Ue="drqe3ud",Ye="drqe3ue",Fe="drqe3uf";var Ve="drqe3uh",We="drqe3ui",F={enabled:"drqe3uk drqe3uj",disabled:"drqe3ul drqe3uj"},V={ran:"drqe3un drqe3um",dim:"drqe3uo drqe3um"},J={ran:"drqe3uq drqe3up",cached:"drqe3ur drqe3up",untouched:"drqe3us drqe3up"},ze=({width:e=380,style:t,className:r}={})=>{const{compileBus:s}=l.useGraphContext(),[o]=(0,c.useState)(()=>ve()),[d,a]=(0,c.useState)(!1),[u,h]=(0,c.useState)(g.isCompilerCachingEnabled);(0,c.useEffect)(()=>{const{recordCompile:m}=o.getState(),y=s.getLastTrigger(),S=s.getLastCompile();return y&&S&&m(y,S),s.subscribe(m)},[o,s]);const p=(0,A.useStore)(o,m=>m.lastCompile),x=(0,A.useStore)(o,m=>m.history),k=s.getCacheStats(),q=p===null&&x.length===0,f=()=>{h(m=>{const y=!m;return(0,g.setCompilerCachingEnabled)(y),y})};return(0,i.jsxs)("div",{className:(0,$.default)(Ke,r),style:{width:e,...t},children:[(0,i.jsxs)("div",{className:we,children:[(0,i.jsxs)("div",{children:[(0,i.jsx)("div",{className:He,children:"compile cache"}),(0,i.jsx)("div",{className:Ye,children:q?"production: stats disabled":p?`last: ${p.label} · ${Z(p.durationMs)}`:"awaiting first compile…"})]}),(0,i.jsx)("button",{type:"button",onClick:()=>a(m=>!m),className:Fe,children:d?"▾":"▴"})]}),!d&&(0,i.jsxs)("div",{className:"drqe3ub",children:[(0,i.jsxs)("button",{type:"button",onClick:f,className:u?F.enabled:F.disabled,"aria-pressed":u,children:["cache ",u?"enabled":"disabled"]}),(0,i.jsx)("span",{className:"drqe3ug",children:"next compile reflects this toggle"})]}),!d&&!q&&(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(Xe,{delta:p?.stages,cumulative:k}),(0,i.jsx)(Qe,{entries:x})]})]})},Xe=({delta:e,cumulative:t})=>(0,i.jsxs)("table",{className:Me,children:[(0,i.jsx)("thead",{children:(0,i.jsxs)("tr",{className:Ve,children:[(0,i.jsx)("th",{className:Pe,children:"stage"}),(0,i.jsx)("th",{className:H,children:"Δ miss"}),(0,i.jsx)("th",{className:H,children:"Δ hit"}),(0,i.jsx)("th",{className:H,children:"total miss"}),(0,i.jsx)("th",{className:H,children:"total hit"})]})}),(0,i.jsx)("tbody",{children:g.COMPILER_STAGE_KEYS.map(r=>{const s=e?.[r],o=Je(s);return(0,i.jsxs)("tr",{className:Ae,children:[(0,i.jsxs)("td",{className:$e,children:[(0,i.jsx)("span",{className:J[o],"aria-hidden":!0})," ",r]}),(0,i.jsx)("td",{className:o==="ran"?V.ran:V.dim,children:s?.misses??0}),(0,i.jsx)("td",{className:P,children:s?.hits??0}),(0,i.jsx)("td",{className:P,children:t[r].misses}),(0,i.jsx)("td",{className:P,children:t[r].hits})]},r)})})]}),Qe=({entries:e})=>e.length===0?null:(0,i.jsxs)("div",{className:Ue,children:[(0,i.jsx)("div",{className:We,children:"recent compiles"}),e.map(t=>{const r=Ze(t.stages,d=>d.misses>0),s=g.COMPILER_STAGE_KEYS.length,o=r===0?"cached":"ran";return(0,i.jsxs)("div",{className:Le,children:[(0,i.jsx)("span",{className:J[o],"aria-hidden":!0}),(0,i.jsx)("span",{className:Be,title:t.label,children:t.label}),(0,i.jsxs)("span",{className:Oe,children:[r,"/",s," ran · ",Z(t.durationMs)]})]},t.id)})]}),Je=e=>!e||e.hits===0&&e.misses===0?"untouched":e.misses>0?"ran":"cached",Ze=(e,t)=>{let r=0;for(const s of g.COMPILER_STAGE_KEYS)t(e[s])&&(r+=1);return r},Z=e=>e>=10?`${e.toFixed(0)}ms`:`${e.toFixed(2)}ms`,et=()=>{const{history:e}=l.useGraphContext(),{stack:t,undo:r,redo:s}=e,o=(0,c.useCallback)(u=>t.subscribe(u),[t]),d=(0,c.useCallback)(()=>t.getSnapshot(),[t]),a=(0,c.useSyncExternalStore)(o,d,d);return(0,c.useMemo)(()=>({...a,undo:r,redo:s}),[a,r,s])},tt=new Set(["button","checkbox","color","file","hidden","image","radio","range","reset","submit"]),rt=(e,t={})=>{const{target:r,enabled:s=!0}=t;(0,c.useEffect)(()=>{const o=st(r);if(!s||!o)return;const d=a=>{if(!nt(a)||a.defaultPrevented||ot(a.target))return;const u=l.resolveHistoryStep(a);if(!u)return;const h=e.current;h&&(u==="undo"?h.undo():h.redo())&&a.preventDefault()};return o.addEventListener("keydown",d),()=>o.removeEventListener("keydown",d)},[e,r,s])},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=l.BrandMark;exports.CanvasTextMeasurer=l.CanvasTextMeasurer;exports.DefaultFooter=l.DefaultFooter;exports.DefaultGrid=l.DefaultGrid;exports.DefaultHeader=l.DefaultHeader;exports.DefaultSwatch=l.DefaultSwatch;exports.DefaultTooltip=l.DefaultTooltip;exports.DevToolsPanel=ze;exports.GRAPH_MODES=l.GRAPH_MODES;exports.GraphErrorBoundary=W;exports.GraphErrorPanel=L;exports.GraphProvider=Q;exports.GraphRenderer=l.GraphRenderer;exports.HoverProvider=l.HoverProvider;exports.TextMeasurerProvider=l.TextMeasurerProvider;exports.ThemeProvider=l.ThemeProvider;exports.UnitBoxSvg=Ie;exports.UnitSpaceSvg=De;exports.createGraphyKit=je;exports.darkTheme=l.darkTheme;exports.defineGeomRenderer=l.defineGeomRenderer;exports.lightTheme=l.lightTheme;exports.lightenCss=l.lightenCss;exports.pruneSelection=X;exports.resolveBrandMarkVisual=l.resolveBrandMarkVisual;exports.useCompiledSelector=l.useCompiledSelector;exports.useElementScreenRect=l.useElementScreenRect;exports.useGeomHitTest=l.useGeomHitTest;exports.useGeomHover=l.useGeomHover;exports.useGraphCommands=l.useGraphCommands;exports.useGraphHandle=l.useGraphHandle;exports.useGraphHistory=et;exports.useGraphHistoryShortcuts=rt;exports.useGraphSelection=l.useGraphSelection;exports.useHandleCompiled=l.useHandleCompiled;exports.useHoverState=l.useHoverState;exports.useStyleReaders=l.useStyleReaders;exports.useStyleResolver=l.useStyleResolver;exports.useTextMeasurer=l.useTextMeasurer;exports.vars=se.vars;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require('./index.css');const c=require("./history-chords-kAwHzxZz.cjs"),se=require("./theme.contract.css-Dd-73-Je.cjs");let m=require("@graphysdk/viz-engine"),l=require("react"),a=require("react/jsx-runtime"),A=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,...r]=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)(U,{diagnostic:t}),r.length>0&&(0,a.jsx)("ul",{className:"_1a5iqpb2",children:r.map((s,o)=>(0,a.jsx)("li",{children:(0,a.jsx)(U,{diagnostic:s})},`${s.code}-${o}`))})]})},U=({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((r,s)=>Object.is(r,t[s]))}var W=class extends l.Component{constructor(...e){super(...e),this.state={caughtDiagnostic:null}}static getDerivedStateFromError(e){return{caughtDiagnostic:(0,m.buildDiagnostic)(e)}}componentDidCatch(e,t){const r=(0,m.buildDiagnostic)(e);c.logDiagnostics([r]),this.props.onError?.([r]),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:r}=this.props;return t&&t.length>0?(0,a.jsx)(L,{errors:t}):r}},z=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},X=(e,t)=>{const r=e.filter(s=>ue(s,t));return r.length===e.length?e:r},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,Y=[],he=()=>(0,B.createStore)(e=>({selection:Y,setSelection:t=>e(r=>ge(r.selection,t)?r:{selection:t}),clearSelection:()=>e(t=>t.selection.length===0?t:{selection:Y})})),ge=(e,t)=>e===t?!0:e.length!==t.length?!1:e.every((r,s)=>{const o=t[s];return o!==void 0&&(0,m.areEditTargetsEqual)(r,o)}),me=process.env.NODE_ENV!=="production",pe=5,fe=e=>{if(!me)return{emit:()=>{},subscribe:()=>ye,getLastTrigger:()=>null,getLastCompile:()=>null,getCacheStats:()=>e.getCacheStats()};const t=new Set;let r=null;return{emit:s=>{const o=e.getLastCompile();if(o){r=s;for(const d of t)d(s,o)}},subscribe:s=>(t.add(s),()=>{t.delete(s)}),getLastTrigger:()=>r,getLastCompile:()=>e.getLastCompile(),getCacheStats:()=>e.getCacheStats()}},ve=()=>(0,B.createStore)(e=>({lastCompile:null,history:[],nextId:1,lastSnapshot:null,recordCompile:(t,r)=>e(s=>{if(s.lastSnapshot===r)return s;const o={id:s.nextId,label:Se(t),stages:r.stages,durationMs:r.durationMs};return{lastCompile:o,history:be(s.history,o,pe),nextId:s.nextId+1,lastSnapshot:r}})})),ye=()=>{},Se=e=>{switch(e.kind){case"init":return"init";case"input":return"input change";case"data":return"data change";case"command":return e.command.metadata.description}},be=(e,t,r)=>{const s=e.length>=r?e.length-(r-1):0;return[...e.slice(s),t]};function Ee(e){const t=e.filter(z),r=new Set([...Object.keys(c.BUILT_IN_GEOM_RENDERERS),...t.map(u=>u.geom)]),s=[],o=new Set;for(const u of e){const g=de(u);g===null||r.has(g.type)||o.has(g.type)||(o.add(g.type),s.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 d=new Map;for(const u of t){if("definition"in u)continue;const g=`${u.geom}|${u.coord}`,p=d.get(g);p?p.count+=1:d.set(g,{geom:u.geom,coord:u.coord,count:1})}const i=[];for(const{geom:u,coord:g,count:p}of d.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:s,warnings:i}}function xe(e,t){const{coordSystem:r,layers:s}=e,o=new Set,d=[];for(const i of s)t(i.geom,r.type)!==null||o.has(i.geom)||(o.add(i.geom),d.push({kind:"user-input",severity:"warning",code:"MISSING_GEOM_RENDERER",message:`No renderer for geom '${i.geom}' under ${r.type} coords; the layer is not painted.`,context:{requested:i.geom,kind:"geom-renderer"},suggestion:`Register a renderer for ('${i.geom}', '${r.type}') via \`defineGeomRenderer\`.`}));return d}function Te(e,t){const{coordSystem:r,layers:s}=e,o=new Set,d=[];for(const i of s){if(i.interactive===!1||i.spatialKind!=="render-hit-test"||o.has(i.geom))continue;const u=t(i.geom,r.type);u===null||u.hitTest||c.isOverlayHosted(u)||(o.add(i.geom),d.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}', '${r.type}').`}))}return d}function Ce(e){const t=new Set,r=[];for(const s of e.layers){const o=s.identityKey;s.interactive!==!1&&(s.spatialKind!=="render-hit-test"||typeof o!="object"||t.has(s.geom)||s.data.hasVariable(o.variable)||(t.add(s.geom),r.push({kind:"user-input",severity:"warning",code:"RENDER_HIT_TEST_IDENTITY",message:`Geom '${s.geom}' keys its identity on '${o.variable}', a column its compile output does not emit; its hover lookup is empty.`,context:{requested:s.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 r}function Re(e,t){const{coordSystem:r,layers:s}=e,o=new Set,d=[];for(const i of s){if(i.interactive===!1||i.spatialKind!=="render-hit-test"||o.has(i.geom))continue;const u=t(i.geom,r.type);u===null||!u.hitTest||!c.isOverlayHosted(u)||(o.add(i.geom),d.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 d}function qe(e,t){const r=new Set,s=[];for(const o of e.layers)o.interactive!==!1&&(o.spatialKind!=="render-hit-test"||r.has(o.geom)||t.hasCapability(o.geom)||(r.add(o.geom),s.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 s}function Ge(e,t){const{coordSystem:r,layers:s}=e,o=new Set,d=[];for(const i of s){if(i.interactive===!1||i.spatialKind==="render-hit-test"||o.has(i.geom))continue;const u=t(i.geom,r.type);u===null||!c.isOverlayHosted(u)||(o.add(i.geom),d.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 d}var ke=e=>(0,B.createStore)(t=>({scene:e,setScene:r=>t(s=>s.scene===r?s:{scene:r})})),Ne=({input:e,data:t,customPalettes:r,colorScheme:s,plugins:o,resolveRenderer:d,anchorResolver:i,onChange:u,onError:g,onWarnings:p})=>{const T=c.useLatestRef(u),k=c.useLatestRef(g),q=c.useLatestRef(p),[{session:f,compileBus:h}]=(0,l.useState)(()=>{const n=(0,m.createCompiler)({plugins:o});return{session:new m.GraphCompilationSession(n),compileBus:fe(n)}}),[y]=(0,l.useState)(()=>Ee(o??[])),S=(0,l.useRef)(null),[N]=(0,l.useState)(_e),C=(0,l.useRef)(null),b=(0,l.useCallback)(n=>y.errors.length===0?n:[...y.errors,...n??[]],[y]),j=(0,l.useCallback)(n=>{if(!n.ok)return n.errors;if(C.current)C.current.getState().setScene(n.scene);else{const v=ke(n.scene);v.subscribe(N.notify),C.current=v,N.notify()}return null},[N]),[I,D]=(0,l.useState)(()=>{const n=f.compile({input:e,data:t,customPalettes:r,colorScheme:s});return S.current=n,b(j(n))}),G=(0,l.useCallback)(n=>n.ok?[...n.warnings,...xe(n.scene,d),...Te(n.scene,d),...Ce(n.scene),...Re(n.scene,d),...Ge(n.scene,d),...qe(n.scene,i)]:n.warnings,[d,i]),E=(0,l.useCallback)(n=>{n.length!==0&&(c.logDiagnostics(n),k.current?.(n))},[k]),R=(0,l.useCallback)(n=>{n.length!==0&&(c.logDiagnostics(n),q.current?.(n))},[q]);(0,l.useEffect)(()=>{const n=S.current;n&&(E([...y.errors,...n.ok?[]:n.errors]),R([...y.warnings,...G(n)]),n.ok&&h.emit({kind:"init"}))},[h,E,R,y,G]),(0,l.useEffect)(()=>{const n=f.update({input:e,data:t,customPalettes:r,colorScheme:s});if(!n)return;n.sealedInput&&T.current?.(n.sealedInput);const v=j(n.result);D(b(v)),v&&E(v),R(G(n.result)),v||h.emit({kind:n.inputChanged?"input":"data"})},[e,t,r,s,f,h,j,E,R,b,G,T]);const _=(0,l.useCallback)(n=>{D(v=>v===null?v:b(null)),R(G(n))},[b,R,G]),w=(0,l.useCallback)(n=>{n.scene&&C.current?.getState().setScene(n.scene),n.result&&_(n.result),n.command&&h.emit({kind:"command",command:n.command}),n.input&&T.current?.(n.input),n.errors&&E([...n.errors])},[_,h,T,E]),x=(0,l.useCallback)(n=>{for(const v of n)w(v);return n.some(v=>!!v.scene)},[w]),M=(0,l.useCallback)((n,v)=>{x(f.applyCommand(n,v))},[f,x]),ee=(0,l.useCallback)(()=>{x(f.seal())},[f,x]),O=(0,l.useCallback)(()=>x(f.undo()),[f,x]),K=(0,l.useCallback)(()=>x(f.redo()),[f,x]),te=(0,l.useMemo)(()=>({stack:f.history,undo:O,redo:K}),[f,O,K]),re=(0,l.useCallback)(()=>C.current?.getState().scene??null,[]);return{store:C.current,dispatch:M,seal:ee,history:te,subscribe:N.subscribe,getScene:re,compileBus:h,compileErrors:I}},_e=()=>{const e=new Set;return{subscribe:t=>(e.add(t),()=>{e.delete(t)}),notify:()=>e.forEach(t=>t())}},Q=({data:e,input:t,plugins:r=[],formattingLocale:s,handleRef:o,onChange:d,onError:i,onWarnings:u,customPalettes:g,colorScheme:p="light",children:T})=>{const[k]=(0,l.useState)(()=>c.createGeomRendererResolver(r.filter(z))),q=(0,l.useId)(),[f]=(0,l.useState)(()=>(0,m.createAnchorResolver)(r)),[h]=(0,l.useState)(()=>he()),y=(0,l.useMemo)(()=>(0,m.createStyleResolver)({colorScheme:p}),[p]),{store:S,dispatch:N,seal:C,history:b,subscribe:j,getScene:I,compileBus:D,compileErrors:G}=Ne({input:t,data:e,customPalettes:g,colorScheme:p,plugins:r,resolveRenderer:k,anchorResolver:f,onChange:d,onError:i,onWarnings:u});(0,l.useEffect)(()=>{if(S)return S.subscribe((_,w)=>{if(_.scene.spec===w.scene.spec)return;const{selection:x,setSelection:M}=h.getState();x.length!==0&&M(X(x,_.scene.spec))})},[S,h]);const E=(0,l.useMemo)(()=>({dispatch:N,seal:C}),[N,C]);(0,l.useImperativeHandle)(o,()=>({commands:E,undo:b.undo,redo:b.redo,subscribe:j,getScene:I,getSelection:()=>h.getState().selection,setSelection:_=>h.getState().setSelection(_),subscribeSelection:h.subscribe}),[E,b,j,I,h]);const R=(0,l.useMemo)(()=>S?{chartId:q,store:S,selectionStore:h,commands:E,history:b,formattingLocale:s,compileBus:D,colorScheme:p,styleResolver:y,anchorResolver:f}:null,[q,S,h,E,b,s,D,p,y,f]);return(0,a.jsx)(W,{forcedErrors:G,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 je(e){const t=(0,m.createGraphyBuilder)(e);return{...t,GraphProvider:s=>(0,a.jsx)(Q,{...s,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",H="drqe3u4",$e="drqe3u5",Le="drqe3u6",Be="drqe3u7",P="drqe3u8",Oe="drqe3u9",Ke="drqe3ua";var Ae="drqe3uc",Ue="drqe3ud",Ye="drqe3ue",Fe="drqe3uf";var Ve="drqe3uh",We="drqe3ui",F={enabled:"drqe3uk drqe3uj",disabled:"drqe3ul drqe3uj"},V={ran:"drqe3un drqe3um",dim:"drqe3uo drqe3um"},J={ran:"drqe3uq drqe3up",cached:"drqe3ur drqe3up",untouched:"drqe3us drqe3up"},ze=({width:e=380,style:t,className:r}={})=>{const{compileBus:s}=c.useGraphContext(),[o]=(0,l.useState)(()=>ve()),[d,i]=(0,l.useState)(!1),[u,g]=(0,l.useState)(m.isCompilerCachingEnabled);(0,l.useEffect)(()=>{const{recordCompile:h}=o.getState(),y=s.getLastTrigger(),S=s.getLastCompile();return y&&S&&h(y,S),s.subscribe(h)},[o,s]);const p=(0,A.useStore)(o,h=>h.lastCompile),T=(0,A.useStore)(o,h=>h.history),k=s.getCacheStats(),q=p===null&&T.length===0,f=()=>{g(h=>{const y=!h;return(0,m.setCompilerCachingEnabled)(y),y})};return(0,a.jsxs)("div",{className:(0,$.default)(Ke,r),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:q?"production: stats disabled":p?`last: ${p.label} · ${Z(p.durationMs)}`:"awaiting first compile…"})]}),(0,a.jsx)("button",{type:"button",onClick:()=>i(h=>!h),className:Fe,children:d?"▾":"▴"})]}),!d&&(0,a.jsxs)("div",{className:"drqe3ub",children:[(0,a.jsxs)("button",{type:"button",onClick:f,className:u?F.enabled:F.disabled,"aria-pressed":u,children:["cache ",u?"enabled":"disabled"]}),(0,a.jsx)("span",{className:"drqe3ug",children:"next compile reflects this toggle"})]}),!d&&!q&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(Xe,{delta:p?.stages,cumulative:k}),(0,a.jsx)(Qe,{entries:T})]})]})},Xe=({delta:e,cumulative:t})=>(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:H,children:"Δ miss"}),(0,a.jsx)("th",{className:H,children:"Δ hit"}),(0,a.jsx)("th",{className:H,children:"total miss"}),(0,a.jsx)("th",{className:H,children:"total hit"})]})}),(0,a.jsx)("tbody",{children:m.COMPILER_STAGE_KEYS.map(r=>{const s=e?.[r],o=Je(s);return(0,a.jsxs)("tr",{className:Ae,children:[(0,a.jsxs)("td",{className:$e,children:[(0,a.jsx)("span",{className:J[o],"aria-hidden":!0})," ",r]}),(0,a.jsx)("td",{className:o==="ran"?V.ran:V.dim,children:s?.misses??0}),(0,a.jsx)("td",{className:P,children:s?.hits??0}),(0,a.jsx)("td",{className:P,children:t[r].misses}),(0,a.jsx)("td",{className:P,children:t[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 r=Ze(t.stages,d=>d.misses>0),s=m.COMPILER_STAGE_KEYS.length,o=r===0?"cached":"ran";return(0,a.jsxs)("div",{className:Le,children:[(0,a.jsx)("span",{className:J[o],"aria-hidden":!0}),(0,a.jsx)("span",{className:Be,title:t.label,children:t.label}),(0,a.jsxs)("span",{className:Oe,children:[r,"/",s," ran · ",Z(t.durationMs)]})]},t.id)})]}),Je=e=>!e||e.hits===0&&e.misses===0?"untouched":e.misses>0?"ran":"cached",Ze=(e,t)=>{let r=0;for(const s of m.COMPILER_STAGE_KEYS)t(e[s])&&(r+=1);return r},Z=e=>e>=10?`${e.toFixed(0)}ms`:`${e.toFixed(2)}ms`,et=()=>{const{history:e}=c.useGraphContext(),{stack:t,undo:r,redo:s}=e,o=(0,l.useCallback)(u=>t.subscribe(u),[t]),d=(0,l.useCallback)(()=>t.getSnapshot(),[t]),i=(0,l.useSyncExternalStore)(o,d,d);return(0,l.useMemo)(()=>({...i,undo:r,redo:s}),[i,r,s])},tt=new Set(["button","checkbox","color","file","hidden","image","radio","range","reset","submit"]),rt=(e,t={})=>{const{target:r,enabled:s=!0}=t;(0,l.useEffect)(()=>{const o=st(r);if(!s||!o)return;const d=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",d),()=>o.removeEventListener("keydown",d)},[e,r,s])},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=W;exports.GraphErrorPanel=L;exports.GraphProvider=Q;exports.GraphRenderer=c.GraphRenderer;exports.HoverProvider=c.HoverProvider;exports.TextMeasurerProvider=c.TextMeasurerProvider;exports.ThemeProvider=c.ThemeProvider;exports.UnitBoxSvg=Ie;exports.UnitSpaceSvg=De;exports.createGraphyKit=je;exports.darkTheme=c.darkTheme;exports.defineGeomRenderer=c.defineGeomRenderer;exports.lightTheme=c.lightTheme;exports.lightenCss=c.lightenCss;exports.pruneSelection=X;exports.resolveBrandMarkVisual=c.resolveBrandMarkVisual;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.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
|
@@ -4,9 +4,6 @@ import { CartesianCoordSystem } from '@graphysdk/viz-engine';
|
|
|
4
4
|
import { ColorScheme } from '@graphysdk/viz-engine';
|
|
5
5
|
import { Command } from '@graphysdk/viz-engine';
|
|
6
6
|
import { CommandStackSnapshot } from '@graphysdk/viz-engine';
|
|
7
|
-
import { CompiledLayer } from '@graphysdk/viz-engine';
|
|
8
|
-
import { CompiledLayerFor } from '@graphysdk/viz-engine';
|
|
9
|
-
import { CompiledSpec } from '@graphysdk/viz-engine';
|
|
10
7
|
import { Component } from 'react';
|
|
11
8
|
import { ComponentType } from 'react';
|
|
12
9
|
import { CoordSystem } from '@graphysdk/viz-engine';
|
|
@@ -50,11 +47,15 @@ import { RenderHitTester } from '@graphysdk/viz-engine';
|
|
|
50
47
|
import { ResolvedHeadlineSize } from '@graphysdk/viz-engine';
|
|
51
48
|
import { ResolvedSourceStyle } from '@graphysdk/viz-engine';
|
|
52
49
|
import { ResolvedTextStyle } from '@graphysdk/viz-engine';
|
|
50
|
+
import { Scene } from '@graphysdk/viz-engine';
|
|
51
|
+
import { SceneLayer } from '@graphysdk/viz-engine';
|
|
52
|
+
import { SceneLayerFor } from '@graphysdk/viz-engine';
|
|
53
53
|
import { SourceContent } from '@graphysdk/viz-engine';
|
|
54
54
|
import { Spec } from '@graphysdk/viz-engine';
|
|
55
55
|
import { SpecInput } from '@graphysdk/viz-engine';
|
|
56
56
|
import { StoreApi } from 'zustand';
|
|
57
57
|
import { StyleReadersForLayer } from '@graphysdk/viz-engine';
|
|
58
|
+
import { StyleReaderTree } from '@graphysdk/viz-engine';
|
|
58
59
|
import { StyleResolver } from '@graphysdk/viz-engine';
|
|
59
60
|
import { SVGProps } from 'react';
|
|
60
61
|
import { TextContent } from '@graphysdk/viz-engine';
|
|
@@ -152,13 +153,6 @@ export declare class CanvasTextMeasurer implements TextMeasurer {
|
|
|
152
153
|
private getEmojiCorrection;
|
|
153
154
|
}
|
|
154
155
|
|
|
155
|
-
/**
|
|
156
|
-
* The compiled layer a renderer's handlers receive. A built-in renderer keyed to a `GeomName` gets
|
|
157
|
-
* its param-narrowed `CompiledLayerFor<G>`; a custom renderer (`G = string`) is downstream of
|
|
158
|
-
* serialisation, never sees the plugins array, and reads the base {@link CompiledLayer} dynamically.
|
|
159
|
-
*/
|
|
160
|
-
declare type CompiledLayerOf<G extends GeomName | string> = G extends GeomName ? CompiledLayerFor<G> : CompiledLayer;
|
|
161
|
-
|
|
162
156
|
declare type CoordKind = CoordSystem['type'];
|
|
163
157
|
|
|
164
158
|
/** Maps a coord-kind discriminator to the corresponding `CoordSystem` member. */
|
|
@@ -338,7 +332,7 @@ export declare type GeomRender<G extends GeomName | string = string, C extends C
|
|
|
338
332
|
/**
|
|
339
333
|
* The render side of a geom: everything a single `(geom, coord)` composition needs to render and
|
|
340
334
|
* respond to hover. Generic over the geom name and coord kind, so a built-in renderer parameterised
|
|
341
|
-
* as `GeomRenderContract<'bar', 'cartesian'>` receives param-narrowed inputs (`
|
|
335
|
+
* as `GeomRenderContract<'bar', 'cartesian'>` receives param-narrowed inputs (`SceneLayerFor<'bar'>`,
|
|
342
336
|
* `CartesianCoordSystem`), while the default `<string, CoordKind>` instantiation is the base/custom
|
|
343
337
|
* contract a plugin author writes against. The geom's name, highlight strategy, and `params` type are
|
|
344
338
|
* NOT restated here — they are read off the compile definition this contract is bound to (see
|
|
@@ -375,7 +369,7 @@ export declare interface GeomRenderContract<G extends GeomName | string = string
|
|
|
375
369
|
renderHoverCompanions: (input: HoverCompanionsRenderInput<G>) => ReactNode;
|
|
376
370
|
/**
|
|
377
371
|
* Render-side spatial query for a `'render-hit-test'` layer whose geometry is precomputed into the
|
|
378
|
-
*
|
|
372
|
+
* scene (sankey ribbons, treemap tiles, voronoi cells). A
|
|
379
373
|
* **factory**: given the render input it returns the per-cursor {@link RenderHitTester};
|
|
380
374
|
* the renderer memoizes the factory on `layer.data` and the panel pixel frame, so the read runs once
|
|
381
375
|
* per data or panel-size change and the per-move query allocates nothing. The author writes no hook;
|
|
@@ -406,7 +400,7 @@ export declare type GeomRendererInput = GeomRenderInput;
|
|
|
406
400
|
export declare type GeomRenderFn<G extends GeomName | string = string, C extends CoordKind = CoordKind> = (input: GeomRenderInput<G, C>) => ReactNode;
|
|
407
401
|
|
|
408
402
|
declare interface GeomRenderInput<G extends GeomName | string = string, C extends CoordKind = CoordKind> extends GeomPaintInput {
|
|
409
|
-
layer:
|
|
403
|
+
layer: SceneLayerOf<G>;
|
|
410
404
|
coordSystem: CoordSystemFor<C>;
|
|
411
405
|
shouldAnimateTransitions: boolean;
|
|
412
406
|
formattingLocale: Locale;
|
|
@@ -533,12 +527,12 @@ export declare interface GraphHandle {
|
|
|
533
527
|
commands: GraphCommands;
|
|
534
528
|
/**
|
|
535
529
|
* Registers a listener fired on every change to the graph; returns the unsubscribe. With
|
|
536
|
-
* {@link GraphHandle.
|
|
530
|
+
* {@link GraphHandle.getScene} it is what `useSyncExternalStore` needs, so a surface outside the
|
|
537
531
|
* graph's tree stays in step with it. Subscribing before the graph compiles is valid.
|
|
538
532
|
*/
|
|
539
533
|
subscribe: (onGraphChange: () => void) => () => void;
|
|
540
|
-
/** The graph's
|
|
541
|
-
|
|
534
|
+
/** The graph's scene as of now, or `null` before its first successful compile. */
|
|
535
|
+
getScene: () => Scene | null;
|
|
542
536
|
/**
|
|
543
537
|
* Reverse the most recent command. Returns whether the chart took the step, so a caller driving
|
|
544
538
|
* this from a keystroke can leave the key to the app when the chart has nothing to undo or the
|
|
@@ -577,7 +571,7 @@ export declare interface GraphHistoryShortcutsOptions {
|
|
|
577
571
|
export declare type GraphMode = (typeof GRAPH_MODES)[keyof typeof GRAPH_MODES];
|
|
578
572
|
|
|
579
573
|
/**
|
|
580
|
-
* Owns the
|
|
574
|
+
* Owns the scene for a graph and exposes it via {@link useSceneSelector}, plus a
|
|
581
575
|
* `dispatch` for applying {@link Command}s. Both failure modes — a non-throwing compile failure and a
|
|
582
576
|
* render-throw from a renderer component — converge on a single {@link GraphErrorBoundary} that shows
|
|
583
577
|
* the error in place, so a broken chart never blanks the page.
|
|
@@ -612,8 +606,8 @@ export declare interface GraphProviderProps {
|
|
|
612
606
|
}
|
|
613
607
|
|
|
614
608
|
/**
|
|
615
|
-
* Renders the
|
|
616
|
-
* layout + DOM — the provider owns the spec and derives the
|
|
609
|
+
* Renders the scene held by the surrounding `<GraphProvider>`. The renderer owns
|
|
610
|
+
* layout + DOM — the provider owns the spec and derives the scene output from it. There's
|
|
617
611
|
* no `config` prop: every consumer must wrap with `<GraphProvider>` so commands can operate
|
|
618
612
|
* on the live spec.
|
|
619
613
|
*/
|
|
@@ -756,11 +750,11 @@ export declare interface HeadlineSlotProps {
|
|
|
756
750
|
*/
|
|
757
751
|
declare interface HighlightRenderInput<G extends GeomName | string = string, C extends CoordKind = CoordKind> extends GeomRenderInput<G, C> {
|
|
758
752
|
/** The full layer `layer` was filtered from — for context the subset can't see, like a stack's silhouette. */
|
|
759
|
-
sourceLayer:
|
|
753
|
+
sourceLayer: SceneLayerOf<G>;
|
|
760
754
|
}
|
|
761
755
|
|
|
762
756
|
declare interface HoverCompanionsRenderInput<G extends GeomName | string = string> extends GeomPaintInput {
|
|
763
|
-
layer:
|
|
757
|
+
layer: SceneLayerOf<G>;
|
|
764
758
|
primary: HoverHit;
|
|
765
759
|
related: HoverHit[];
|
|
766
760
|
}
|
|
@@ -782,8 +776,8 @@ declare type HoverGuideMode = 'crosshair' | 'band';
|
|
|
782
776
|
|
|
783
777
|
/**
|
|
784
778
|
* Hosts the hover store + engine for the surrounding `<GraphProvider>`. Subscribes only to the
|
|
785
|
-
* `layers` and `coordSystem` slices of the
|
|
786
|
-
* so unrelated stage outputs (scales, guides,
|
|
779
|
+
* `layers` and `coordSystem` slices of the scene — the engine never reads anything else,
|
|
780
|
+
* so unrelated stage outputs (scales, guides, summarize, visual mapper) cannot trigger a rebuild.
|
|
787
781
|
*/
|
|
788
782
|
export declare const HoverProvider: ({ children }: HoverProviderProps) => JSX.Element;
|
|
789
783
|
|
|
@@ -792,7 +786,7 @@ declare interface HoverProviderProps {
|
|
|
792
786
|
}
|
|
793
787
|
|
|
794
788
|
declare interface HoverRenderInput<G extends GeomName | string = string, C extends CoordKind = CoordKind> extends GeomPaintInput {
|
|
795
|
-
layer:
|
|
789
|
+
layer: SceneLayerOf<G>;
|
|
796
790
|
coordSystem: CoordSystemFor<C>;
|
|
797
791
|
primary: HoverHit;
|
|
798
792
|
group: HoverHit[];
|
|
@@ -880,7 +874,7 @@ export declare interface OverlayAnchor {
|
|
|
880
874
|
}
|
|
881
875
|
|
|
882
876
|
declare interface OverlayAnchorInput<G extends GeomName | string = string, C extends CoordKind = CoordKind> {
|
|
883
|
-
layer:
|
|
877
|
+
layer: SceneLayerOf<G>;
|
|
884
878
|
coordSystem: CoordSystemFor<C>;
|
|
885
879
|
observation: Observation;
|
|
886
880
|
}
|
|
@@ -924,6 +918,13 @@ export declare interface ResolvedGeomRenderer extends GeomRenderContract {
|
|
|
924
918
|
geom: string;
|
|
925
919
|
}
|
|
926
920
|
|
|
921
|
+
/**
|
|
922
|
+
* The compiled layer a renderer's handlers receive. A built-in renderer keyed to a `GeomName` gets
|
|
923
|
+
* its param-narrowed `SceneLayerFor<G>`; a custom renderer (`G = string`) is downstream of
|
|
924
|
+
* serialisation, never sees the plugins array, and reads the base {@link SceneLayer} dynamically.
|
|
925
|
+
*/
|
|
926
|
+
declare type SceneLayerOf<G extends GeomName | string> = G extends GeomName ? SceneLayerFor<G> : SceneLayer;
|
|
927
|
+
|
|
927
928
|
/** An element's on-screen rect in client coordinates — what a fixed-position overlay aligns to. */
|
|
928
929
|
export declare interface ScreenRect {
|
|
929
930
|
left: number;
|
|
@@ -1129,19 +1130,6 @@ declare interface UnitSpaceSvgProps extends Omit<SVGProps<SVGSVGElement>, 'viewB
|
|
|
1129
1130
|
children: ReactNode;
|
|
1130
1131
|
}
|
|
1131
1132
|
|
|
1132
|
-
/**
|
|
1133
|
-
* Subscribes to a derived slice of the compiled spec. The subscription only fires when the
|
|
1134
|
-
* selector's result changes by reference, so combined with the compiler's per-stage memoization
|
|
1135
|
-
* this skips re-renders whenever the selected slice is unchanged.
|
|
1136
|
-
*
|
|
1137
|
-
* @example
|
|
1138
|
-
* ```ts
|
|
1139
|
-
* const layers = useCompiledSelector((compiled) => compiled.layers);
|
|
1140
|
-
* const xAxis = useCompiledSelector((compiled) => compiled.guides.axes[0]);
|
|
1141
|
-
* ```
|
|
1142
|
-
*/
|
|
1143
|
-
export declare const useCompiledSelector: <Selected>(selector: (compiled: CompiledSpec) => Selected) => Selected;
|
|
1144
|
-
|
|
1145
1133
|
/**
|
|
1146
1134
|
* Tracks an element's on-screen rect, so that a fixed-position overlay can sit exactly over it in pixel
|
|
1147
1135
|
* space. `screenRect` is `null` until the first measurement lands, and drops back to `null` whenever the
|
|
@@ -1264,19 +1252,32 @@ export declare const useGraphHistoryShortcuts: (handleRef: RefObject<GraphHandle
|
|
|
1264
1252
|
export declare const useGraphSelection: () => readonly EditTarget[];
|
|
1265
1253
|
|
|
1266
1254
|
/**
|
|
1267
|
-
* The graph's
|
|
1255
|
+
* The graph's scene, re-read whenever the graph changes, or `null` before its first
|
|
1268
1256
|
* successful compile.
|
|
1269
1257
|
*
|
|
1270
|
-
* Returns the whole
|
|
1258
|
+
* Returns the whole scene: `useSyncExternalStore` compares snapshots by reference, so a selector
|
|
1271
1259
|
* building a fresh object per call would re-render forever. Derive slices at the call site.
|
|
1272
1260
|
*/
|
|
1273
|
-
export declare const
|
|
1261
|
+
export declare const useHandleScene: (handle: GraphHandle) => Scene | null;
|
|
1274
1262
|
|
|
1275
1263
|
/**
|
|
1276
1264
|
* Subscribe to a slice of the hover state from inside a `HoverProvider`.
|
|
1277
1265
|
*/
|
|
1278
1266
|
export declare function useHoverState<T>(selector: (state: HoverStoreState) => T): T;
|
|
1279
1267
|
|
|
1268
|
+
/**
|
|
1269
|
+
* Subscribes to a derived slice of the scene. The subscription only fires when the
|
|
1270
|
+
* selector's result changes by reference, so combined with the compiler's per-stage memoization
|
|
1271
|
+
* this skips re-renders whenever the selected slice is unchanged.
|
|
1272
|
+
*
|
|
1273
|
+
* @example
|
|
1274
|
+
* ```ts
|
|
1275
|
+
* const layers = useSceneSelector((scene) => scene.layers);
|
|
1276
|
+
* const xAxis = useSceneSelector((scene) => scene.guides.axes[0]);
|
|
1277
|
+
* ```
|
|
1278
|
+
*/
|
|
1279
|
+
export declare const useSceneSelector: <Selected>(selector: (scene: Scene) => Selected) => Selected;
|
|
1280
|
+
|
|
1280
1281
|
/**
|
|
1281
1282
|
* Style readers for a layer, resolving paint through the stylesheet cascade. Takes either a base layer
|
|
1282
1283
|
* or a highlight's filtered sub-layer. A known geom kind gets back its own readers, whose
|
|
@@ -1284,7 +1285,13 @@ export declare function useHoverState<T>(selector: (state: HoverStoreState) => T
|
|
|
1284
1285
|
*
|
|
1285
1286
|
* Plugin paint can also read the same cascade from `input.styleReaders` on the geom render contract.
|
|
1286
1287
|
*/
|
|
1287
|
-
export declare const useStyleReaders: <L extends
|
|
1288
|
+
export declare const useStyleReaders: <L extends SceneLayer>(layer: L) => StyleReadersForLayer<L>;
|
|
1289
|
+
|
|
1290
|
+
/**
|
|
1291
|
+
* Nested chart style tree from the provider resolver. Subscribes to `scene.chrome`, so a chrome
|
|
1292
|
+
* recompile re-renders callers. {@link useStyleReaders} does not, which is why this is a separate hook.
|
|
1293
|
+
*/
|
|
1294
|
+
export declare const useStyleReaderTree: () => StyleReaderTree;
|
|
1288
1295
|
|
|
1289
1296
|
/** The chart's stylesheet resolver. One instance per provider, rebuilt when the colour scheme flips. */
|
|
1290
1297
|
export declare const useStyleResolver: () => StyleResolver;
|
|
@@ -1297,17 +1304,17 @@ export declare const vars: {
|
|
|
1297
1304
|
white: `var(--${string})`;
|
|
1298
1305
|
black: `var(--${string})`;
|
|
1299
1306
|
transparent: `var(--${string})`;
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1307
|
+
gray100: `var(--${string})`;
|
|
1308
|
+
gray95: `var(--${string})`;
|
|
1309
|
+
gray90: `var(--${string})`;
|
|
1310
|
+
gray85: `var(--${string})`;
|
|
1311
|
+
gray80: `var(--${string})`;
|
|
1312
|
+
gray75: `var(--${string})`;
|
|
1313
|
+
gray70: `var(--${string})`;
|
|
1314
|
+
gray60: `var(--${string})`;
|
|
1315
|
+
gray50: `var(--${string})`;
|
|
1316
|
+
gray0: `var(--${string})`;
|
|
1317
|
+
grayGradient80: `var(--${string})`;
|
|
1311
1318
|
green60: `var(--${string})`;
|
|
1312
1319
|
green50: `var(--${string})`;
|
|
1313
1320
|
red60: `var(--${string})`;
|